32 #ifndef _QORE_INTERN_PARSEREFERENCENODE_H
33 #define _QORE_INTERN_PARSEREFERENCENODE_H
35 #include "qore/intern/ParseNode.h"
37 class IntermediateParseReferenceNode;
39 class ParseReferenceNode :
public ParseNode {
44 const QoreTypeInfo* typeInfo;
47 DLLLOCAL ~ParseReferenceNode() {
53 return evalToRef(xsink);
59 DLLLOCAL
virtual void parseInitImpl(
QoreValue& val, LocalVar* oflag,
int pflag,
int& lvids,
const QoreTypeInfo*& typeInfo);
65 DLLLOCAL ParseReferenceNode(
const QoreProgramLocation* loc,
QoreValue exp,
const QoreTypeInfo* typeInfo = referenceTypeInfo) : ParseNode(loc,
NT_PARSEREFERENCE, true, false), lvexp(exp), typeInfo(typeInfo) {
76 str.
sprintf(
"parse reference expression (%p)",
this);
90 getAsString(*rv, foff, xsink);
95 DLLLOCAL
virtual const char* getTypeName()
const {
96 return "reference to lvalue";
99 DLLLOCAL
virtual const QoreTypeInfo* getTypeInfo()
const {
104 DLLLOCAL IntermediateParseReferenceNode* evalToIntermediate(
ExceptionSink* xsink)
const;
110 class IntermediateParseReferenceNode :
public ParseReferenceNode {
113 const void* lvalue_id;
114 const qore_class_private* cls;
123 DLLLOCAL IntermediateParseReferenceNode(
const QoreProgramLocation* loc,
QoreValue exp,
const QoreTypeInfo* typeInfo,
QoreObject* o,
const void* lvid,
const qore_class_private* n_cls);
131 #endif // _QORE_INTERN_PARSEREFERENCENODE_H