美文网首页
JavaScript解释器更新(二)

JavaScript解释器更新(二)

作者: 三生石上绛珠草 | 来源:发表于2016-06-23 00:47 被阅读23次

    虽说早就添加了bool类型支持,然而bool表达式的解析总是有些问题,今天一天基本是在解决这些琐碎的小bug,解决办法无非是反复断点调试+反复变换的UnitTest。后来发现原来是拼错了一个单词,Add拼成了And,导致token读取位置出错,改了之后完美运行。

    今天最蛋疼的还是github,远程提交总是出错,每次都出错,弄了很久的命令行才成功,成功了都不知道是为什么。反正基本上是客户端提交失败就换命令行,命令行失败就换客户端。以前明明很顺的。

    js解释器计划继续添加以前忽略的特性,每天都发现有很多to-do list,真是可怕,越写越长。

    • for / for..in
    • do..while
    • Array(DictArray) [] {'1':2,'3':3} 直接创建Array
    • object {} 对象字面量{a:10,b:function(){}}
    • 支持解释多行语句
    • Math
    • proto
    • es6新特性支持
    • String Array Function Library

    今天太热了,下午完全写不动代码,晚上发现了一个奇怪的bug,1==1居然返回false,耗费良久时间解决不了,结果总是和真是结果反着来,我被迫将==的回调函数写成了这样:

    (s1,s2)=>s1 != s2;
    

    然后居然结果就正确了,我百思不得其解,明明>,<,<=,>=都是正常的,唯独这个==的回调非要反着写才返回true。不知道这是哪根筋搭错了。

    (s1,s2)=>s1 == s2;
    

    试验1==1,居然亲眼看见返回了false,我瞎了。。。

    被迫反着写了2333333333。昧着良心。

    最后发现是要重载==和!=,喵的因为我的JsNumber的value虽然是int类型,然而C#编译器好像不认一样,我服。

    public static bool operator ==(JsNumber num1,JsNumber num2)
    {
           return Object.Equals(num1.value, num2.value);
    }
    public static bool operator !=(JsNumber num1, JsNumber num2)
    {
           return !Object.Equals(num1.value, num2.value);
    }
    

    不过说起来,重载运算符还是在C++里面方便,C#这重载语言看着不合常理。不过C#其他方面太优秀了,瑕不掩瑜。

    相关文章

      网友评论

          本文标题:JavaScript解释器更新(二)

          本文链接:https://www.haomeiwen.com/subject/rspndttx.html