2 * Programming Language SOOPY
3 * (Simple Object Oriented Programming sYstem)
5 * Copyright (C) 2002 SUZUKI Jun
7 * URL: http://sourceforge.jp/projects/soopy/
8 * License: GPL(GNU General Public License)
11 * $Id: Symbol.cpp,v 1.19 2004/03/21 05:48:06 randy Exp $
20 bool SpSymbol::operator==(SpObject& obj)
23 SpSymbol* sym = dynamic_cast<SpSymbol*>(&obj);
25 // return str == sym->str;
28 return SpString::operator==(*p2);
34 bool SpSymbol::operator<(SpObject& obj)
37 SpSymbol* sym = dynamic_cast<SpSymbol*>(&obj);
41 return SpString::operator<(obj);
44 return SpObject::operator<(obj);
47 SpValue& SpSymbol::eval()
49 SpValue val = getCurrentNS();
50 SpNameSpace* ns = dynamic_cast<SpNameSpace*>(val.getObject());
51 SpValue key(new SpSymbol(str));
54 v = ns->lookup(key, ns);
55 if(v.isConstructor()){
59 return SpValueResult(v);
62 SpValue& SpSymbol::toString()
64 // static SpValue val;
65 // val.setNewObject(new SpString(toCStringWithEncoder()));
67 return SpObjectResult(new SpString(toCStringWithEncoder()));
70 SpValue& SpSymbol::eq(SpValue&, SpValue& e2)
73 throw SpException("type mismatch in ==(Symbol, ...)");
75 SpSymbol* s = e2.asSymbol();
86 SpValue& SpSymbol::onMessage(SpValue& rec, SpValue& msg)
88 return SymbolMsgHandler(rec, msg);
94 // init Message Handler
103 bool SpSymbol::match(SpValue& self, SpValue& val, SpNameSpace* ns)
106 NSVar* var = new NSVar(self);
107 ns->intern(var, val);
109 ns->internVar(self, val);