ソースを参照

Accessing an undefined variable causes a fatal error.

master
Ian Piumarta 1年前
コミット
4a959a124f
1個のファイルの変更9行の追加6行の削除
  1. +9
    -6
      minproto.leg

+ 9
- 6
minproto.leg ファイルの表示

@ -1,6 +1,6 @@
# minproto.leg -- minimal prototype langauge for semantic experiments
#
# last edited: 2024-05-09 11:30:35 by piumarta on zora-1034.local
# last edited: 2024-05-09 13:59:36 by piumarta on zora-1034.local
%{
;
@ -160,6 +160,8 @@ union object _nil = { Undefined };
#define nil (&_nil)
#define UNDEFINED 0
enum type getType(oop obj)
{
# if TAGS
@ -393,7 +395,7 @@ oop newSymbol(char *name)
{
oop obj = make(Symbol);
_set(obj, Symbol,name, strdup(name));
_set(obj, Symbol,value, nil);
_set(obj, Symbol,value, UNDEFINED);
return obj;
}
@ -566,7 +568,7 @@ oop Object_get(oop obj, oop key)
if (ind >= 0) return _get(o, Object,properties)[ind].val;
o = _getDelegate(o);
}
fatal("%s.%s is undefined", storeString(obj, 0), storeString(key, 0));
fatal("undefined property: %s.%s", storeString(obj, 0), storeString(key, 0));
return nil;
}
@ -577,7 +579,9 @@ oop getvar(oop obj, oop key)
if (ind >= 0) return _get(obj, Object,properties)[ind].val;
obj = _getDelegate(obj);
}
return is(Symbol, key) ? _get(key, Symbol,value) : nil;
oop value = _get(key, Symbol,value); // asserts is(Symbol,key)
if (!value) fatal("undefined variable: %s", storeString(key, 0));
return value;
}
oop setvar(oop obj, oop key, oop val)
@ -1250,8 +1254,7 @@ oop Invoke_eval(oop exp, oop env)
oop self = eval (Object_get(exp, sym_self ), env);
oop meth = Object_get(exp, sym_method ) ;
oop iargs = evargs(Object_get(exp, sym_arguments), env);
oop ifunc = Object_get(self, meth);
if (nil == ifunc) fatal("%s.%s is undefined", storeString(self, 0), storeString(meth, 0));
oop ifunc = Object_get(self, meth); // fails if property not defined
return apply(ifunc, self, iargs, env);
}

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