diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2014-01-02 09:17:07 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2014-01-02 09:17:07 (GMT) |
commit | 7d35dc662f87cf8c5b430c248f1da15ba16104b7 (patch) | |
tree | 84d0a746be1a9189703b8571f3135f6bfd154a73 /generic/tclCompCmdsGR.c | |
parent | f918716ff4945cac9a2903bde7f3a337fee78c90 (diff) | |
parent | 1dbca95b72ebb7a627cbd13ebfa12bfa5c1bd9d7 (diff) | |
download | tcl-7d35dc662f87cf8c5b430c248f1da15ba16104b7.zip tcl-7d35dc662f87cf8c5b430c248f1da15ba16104b7.tar.gz tcl-7d35dc662f87cf8c5b430c248f1da15ba16104b7.tar.bz2 |
implement TclOO's [next] in bytecode
Diffstat (limited to 'generic/tclCompCmdsGR.c')
-rw-r--r-- | generic/tclCompCmdsGR.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/generic/tclCompCmdsGR.c b/generic/tclCompCmdsGR.c index df8895f..b8a7e0f 100644 --- a/generic/tclCompCmdsGR.c +++ b/generic/tclCompCmdsGR.c @@ -3039,6 +3039,41 @@ IndexTailVarIfKnown( return localIndex; } +/* + * ---------------------------------------------------------------------- + * + * TclCompileObjectNextCmd, TclCompileObjectSelfCmd -- + * + * Compilations of the TclOO utility commands [next] and [self]. + * + * ---------------------------------------------------------------------- + */ + +int +TclCompileObjectNextCmd( + Tcl_Interp *interp, /* Used for error reporting. */ + Tcl_Parse *parsePtr, /* Points to a parse structure for the command + * created by Tcl_ParseCommand. */ + Command *cmdPtr, /* Points to defintion of command being + * compiled. */ + CompileEnv *envPtr) /* Holds resulting instructions. */ +{ + DefineLineInformation; /* TIP #280 */ + Tcl_Token *tokenPtr = parsePtr->tokenPtr; + int i; + + if (parsePtr->numWords > 255) { + return TCL_ERROR; + } + + for (i=0 ; i<parsePtr->numWords ; i++) { + CompileWord(envPtr, tokenPtr, interp, i); + tokenPtr = TokenAfter(tokenPtr); + } + TclEmitInstInt1( INST_TCLOO_NEXT, i, envPtr); + return TCL_OK; +} + int TclCompileObjectSelfCmd( Tcl_Interp *interp, /* Used for error reporting. */ |