]给AutoLisp语言增加goto指令

感谢baitang36写的这个帖子[原创]给AutoLisp语言增加goto指令为我带来灵感,为此编写了该工具。

发了【首发】定义真正意义的可选参数(附带防反编译技术)之后发现懂的人自然懂,不懂的做再多解释也没用,而且适用的人群也不多,所以关于goto的实际应用不做过多的解释,下面直接看例子。



<ignore_js_op>

(defun c:t1 ();跳转测试
        (setq        a        1122334400        sss        1        );goto 1
        (princ        11111111)
        (setq        a        1122334401        sss        1        );end 1
        (princ        2222)(princ)
)


(defun c:t2()
        (setq i 0)
        (repeat 10000;跳过循环
                (setq i(1+ i))
                (if (> i 5)(setq a 1122334400 a 2));goto 2
        )
        (setq a 1122334401 a 2);end 2
        (princ "\ni的值为")(princ i)(princ)
)


(defun c:t3();没有循环语句的循环
        (setq i 0)
        (setq a 1122334401 a 3);end 3
        (setq i(1+ i))
        (if (< i 5)(setq a 1122334400 a 3));goto 3
        (princ "\ni的值为")(princ i)
        (princ)
)


编译成fas之后采用我写的这个工具处理,处理后加载运行,得出下面的结果

命令: t1
2222

命令: t2
i的值为6

命令: t3
i的值为5


对照原来的源码,你看出什么了吗?


下面介绍一下用法:
goto分为两步,一步是起跳,在源码里面用

(setq        a 1122334400 1)

作为goto起跳标志,1122334400 是固定的,1是索引,指向终点标志,变量名随意,用什么都可以,工具会自动清除该句

(setq        a 1122334401 1)
作为goto终点标志,1122334401 是固定的,1是索引,与起跳索引对应,变量名随意,用什么都可以,工具会自动清除句


goto跳转标志
1、1122334400起跳标志,后面跟着跳转终点索引,终点索引为短整数(取值范围为-127至正127区间)。
2、1122334401跳转终点标志,后面跟着终点索引,终点标示为短整数,与起跳标志对应。
3、一个终点可以对应多个起点,最多允许256个终点。
4、终点标志不允许重复。

5、跳转在任何地方跳转,可以跨函数,从一个函数跳到另外一个函数,再跳回来都可以(也可以选择不回来)

posted @ 2020-03-22 18:53  中国膜结构网mjgou  阅读(48)  评论(0编辑  收藏  举报