ソースを参照

Add an intern primitive for symbol creation

コミット
1fe353a40d
1個のファイルの変更17行の追加0行の削除
  1. +17
    -0
      minproto.leg

+ 17
- 0
minproto.leg ファイルの表示

@ -2384,6 +2384,22 @@ oop prim_eval(oop func, oop self, oop args, oop env)
return result; return result;
} }
oop prim_intern(oop func, oop self, oop args, oop env)
{
int argc = _get(args, Object,isize);
oop *indexed = _get(args, Object,indexed);
oop result = nil;
if (argc != 1) {
fatal("intern: invalid number of arguments");
}
if (getType(indexed[0]) != String) {
fatal("intern: argument is not of type String, got %s instead", getTypeName(indexed[0]));
}
return intern(_get(indexed[0], String, value));
}
oop prim_print(oop func, oop self, oop args, oop env) oop prim_print(oop func, oop self, oop args, oop env)
{ {
int argc = _get(args, Object,isize); int argc = _get(args, Object,isize);
@ -2615,6 +2631,7 @@ int main(int argc, char **argv)
_set(intern("chr" ), Symbol,value, newPrimitive(prim_chr)); _set(intern("chr" ), Symbol,value, newPrimitive(prim_chr));
_set(intern("readfile" ), Symbol,value, newPrimitive(prim_readfile)); _set(intern("readfile" ), Symbol,value, newPrimitive(prim_readfile));
_set(intern("exit" ), Symbol,value, newPrimitive(prim_exit)); _set(intern("exit" ), Symbol,value, newPrimitive(prim_exit));
_set(intern("intern" ), Symbol,value, newPrimitive(prim_intern));
Object_put(pObject, intern("new"), newPrimitive(prim_new )); Object_put(pObject, intern("new"), newPrimitive(prim_new ));
Object_put(pObject, intern("push"), newPrimitive(prim_push )); Object_put(pObject, intern("push"), newPrimitive(prim_push ));

読み込み中…
キャンセル
保存