mawk-code - dumping mawk's byte-code
Contents
Name
mawk-code - dumping mawk's byte-code
Program Codes
As mawk executes the program, it maintains a reference to the command to execute in cdp. After that
there may be data and/or references in cdp[0], cdp[1], etc.
When an operation requires operands, mawk pushes the values (or array/string references) onto the stack,
which updates the stack pointer sp. When the operation completes, mawk consumes those entries on the
stack, pushing the result (if any) onto the stack.
While executing user-defined functions, mawk maintains a framepointerfp to address the function's local
variables.
a_catConcatenatearray-indices.
Usage:
Forms a multiple array index by concatenating the elements of sp[1-cnt..0], with each element
separated by SUBSEP.
Parameters:
cdp[0]
cnt, the number of elements to concatenate follows the command.
sp[0]..sp[1-cnt]
hold reference to the elements to concatenate.
Returns the index in sp[0].
a_delDeleteanarrayitem.
Usage:
delete array[expr]
Parameters:
sp[0]
points to array
sp[-1]
is an expra_lengthFindthelengthofanarray.
Usage:
length(array)
Parameters:
sp[0]
points to array.
Returns the length of the array in sp[0].
a_pushaPusharrayaddressontostack.
Usage:
This is used to set up a calling argument for a function.
Parameters:
cdp[0]
array reference follows the command.
Returns the array in sp[0].
a_testTestifanexpressionispresentinanarray.
Usage:
(expression in array)
Parameters:
sp[0]
points to anarray.
sp[-1]
is an expression.
Returns 1 in sp[0] if the expression is found, 0 otherwise.
addAddtwonumbers.
Usage:
first + second
Parameters:
sp[0]
holds the second value.
sp[-1]
holds the first value.
Returns the sum in sp[0].
add_asgCombinedaddition/assignment.
Usage:
target += source
Parameters:
sp[0]
is the source expression
sp[-1]
points to the target
Stores the sum in the target, leaving sp[0] pointing to the target.
ae_pushaPushreferencetoarraycell,givenexpressionforitsindex.
Usage:
arrayname[expression]
Parameters:
cdp[0]
an array reference follows the command.
sp[0]
has an expression, used for the index of a cell in the array.
Returns a reference to the addressed cell in sp[0].
ae_pushiPushcontentsofarraycell,givenexpressionforitsindex.
Usage:
arrayname[expression]
Parameters:
sp[0]
has an expression, used for the index of a cell in the array.
Returns contents of the addressed cell in sp[0].
aloopUpdatereferencetonextcellforarrayloop.
Usage:
for ( i in arrayname ) statement
Parameters:
none
Mawk maintains a stack of array-loop state. It updates the array/cell references in the current loop's
state.
assignAssignsavalue.
Usage:
target = source
Parameters:
sp[0]
is the source expression
sp[-1]
points to the target
Stores the sum in the target, leaving sp[0] pointing to the target.
atan2Computearc-tangentoftwovalues.
Usage:
atan2( first, second )
Parameters:
sp[0]
holds the second value
sp[-1]
holds the first value
Returns the result in sp[0].
callCallafunction.
Usage:
function()
Parameters:
cdp[0]
is a reference to the function block
cdp[1]
holds number of input arguments
Returns function value in sp[0].
catConcatenatetwostrings.
Usage:
firstsecond
Parameters:
sp[0]
is the second string.
sp[-1]
is the first string.
Returns the result in sp[0].
closeClosethefileorpipeassociatedwithanexpression.
Usage:
close( expression )
Parameters:
sp[0]
holds the expression identifying the file to close
Returns the status from closing the file, 0 on success or -1 on failure.
cosComputethecosineofavalueinradians.
Usage:
cos( value )
Parameters:
sp[0]
is the value.
Returns the result in sp[0].
del_aDeleteanarray.
Usage:
delete(array)
Parameters:
sp[0]
is the array to delete.
divDivideonenumberbyanother.
Usage:
first / second
Parameters:
sp[0]
is the second value.
sp[-1]
is the first value.
Returns the quotient in sp[0].
div_asgCombineddivision/assignment.
Usage:
target /= source
Parameters:
sp[0]
is the source
sp[-1]
points to the target
Stores the quotient in the target, leaving sp[0] pointing to the target.
eqComparetwovalues.
Usage:
first == second
Parameters:
sp[0]
is the second value
sp[-1]
is the first value
Returns 1 in sp[0] if the values are equal, otherwise 0.
exitExitsmawkwithaspecificexit-code.
Usage:
exit(exit_code)
Parameters:
sp[0]
is the exit_codeexit0Exitsmawkwithsuccess
Usage:
exit
Parameters:
none
expComputebase-eexponentialfunctionofavalue.
Usage:
exp( value )
Parameters:
sp[0]
is the value
Returns the result in sp[0].
f_add_asgCombinationaddition/assignmenttoNF.
Usage:
NF += expression
Parameters:
sp[0]
is the expression to add
f_assignAssignanexpressiontoNF.
Usage:
NF = expression
Parameters:
sp[0]
is the expressionf_div_asgCombinationdivision/assignmenttoNF.
Usage:
NF /= expression
Parameters:
sp[0]
is the expressionf_mod_asgCombinationmodulus/assignmenttoNF.
Usage:
NF %= expression
Parameters:
sp[0]
is the expressionf_mul_asgCombinationmultiplication/assignmenttoNF.
Usage:
NF *= expression
Parameters:
sp[0]
is the expressionf_post_decPost-decrementusingNF.
Usage:
NF--
Parameters:
holds a reference to the field to use
f_post_incPost-incrementusingNF.
Usage:
NF++
Parameters:
holds a reference to the field to use
f_pow_asgExponentiationusingNF.
Usage:
NF ^= expression
Parameters:
sp[0]
is the expression to use
f_pre_decPredecrementusingNF.
Usage:
--NF
Parameters:
sp[0]
holds a reference to the field to use
f_pre_incPreincrementusingNF.
Usage:
++NF
Parameters:
sp[0]
holds a reference to the field to use
f_pushaPusharrayreferencetodatasplit-upasfields..
Usage:
$0 = expression
getline
Parameters:
cdp[0]
is a reference to the data to be split/assigned.
Returns the resulting array reference in sp[0].
f_pushiPushcontentsofnumberedfield.
Usage:
$expression
Parameters:
cdp[0]
holds a reference to $expression
cdp[1]
holds expression
Returns the field's value in sp[0].
f_sub_asgCombinationsubtraction/assignmenttoNF.
Usage:
NF -= expression
Parameters:
sp[0]
holds a reference to the field to use
fe_pushaPushreferencetonumberedfield.
Usage:
$number
Parameters:
sp[0]
holds the field number
Returns a reference to the field in sp[0].
fe_pushiPushcontentofnumberedfield.
Usage:
$number
Parameters:
sp[0]
holds the field number
Returns the field's content in sp[0].
fflushFlushtheoutputfileorpipeassociatedwithanexpression.
Usage:
fflush( expression )
Parameters:
sp[0]
is the expression value
Returns the result in sp[0].
gtTestiffirstvalueisgreaterthanthesecond.
Usage:
first > second
Parameters:
sp[0]
holds the second value.
sp[-1]
holds the first value.
Returns 1 in sp[0] if the first value is greater than, otherwise 0.
gteTestiffirstvalueisgreaterthanorequaltothesecond.
Usage:
first >= second
Parameters:
sp[0]
holds the second value.
sp[-1]
holds the first value.
Returns 1 in sp[0] if the first value is greater than or equal, otherwise 0.
indexFindthepositionofthesecondstringinthefirst.
Usage:
index( first, second )
Parameters:
sp[0]
is the second string
sp[0]
is the first string
Returns the position in sp[0] starting at 1 if found, 0 if not found.
intReturnsavaluetruncatedtowardszero..
Usage:
int( value )
Parameters:
sp[0]
is the value
Returns the result in sp[0].
jmainGofromBEGINcodetoMAINcode.
Usage:
(internal state)
Parameters:
none
jmpJumptoanewbyte-codeposition,byagivennumberofbytes.
Usage:
(internal state)
Parameters:
cdp[0]
holds the (signed) number of bytes by which to jump.
jnzJumptoanewbyte-codepositionifsp[0]isnonzero,byagivennumberofbytes.
Usage:
(internal state)
Parameters:
cdp[0]
holds the (signed) number of bytes by which to jump.
sp[0]
holds a value to compare against 0.
jzJumptoanewbyte-codepositionifsp[0]iszero,byagivennumberofbytes.
Usage:
(internal state)
Parameters:
cdp[0]
holds the (signed) number of bytes by which to jump.
sp[0]
holds a value to compare against 0.
l_pushaPushalocaladdressontotheevaluationstack.
Usage:
(internal state)
Parameters:
cdp[0]
holds the offset from the framepointerfp.
Returns the address in sp[0].
l_pushiPushcontentsofalocalvariableontotheevaluationstack.
Usage:
(internal state)
Parameters:
cdp[0]
holds the offset from the framepointerfp.
Returns the contents of the local variable in sp[0].
la_pushaPushesareferencetoanarrayontotheevaluationstack.
Usage:
arrayname
Parameters:
cdp[0]
holds the offset from the framepointerfp of a reference to an array.
Returns a reference to the array in sp[0].
lae_pushaPushesareferencetoagivenarraycellontotheevaluationstack.
Usage:
arrayname[expression]
Parameters:
cdp[0]
holds the offset from the framepointerfp of a reference to an array.
sp[0]
holds an expression
Returns a reference to the specified array cell in sp[0].
lae_pushiPushesthecontentsofagivenarraycellontotheevaluationstack.
Usage:
arrayname[expression]
Parameters:
cdp[0]
holds the offset from the framepointerfp of a reference to an array.
sp[0]
holds an expression
Returns the contents of the specified array cell in sp[0].
lengthReturnsthelengthofastringorarrayvalue.
Usage:
length( value )
Parameters:
sp[0]
is the string or array reference
Returns the length in sp[0].
ljnzSpecialjumpforlogical-OR,alwaysprecededbytest.
Usage:
(internal state)
Parameters:
cdp[0]
holds the (signed) number of bytes by which to jump if the value is nonzero.
sp[0]
holds a value to compare against 0.
ljzSpecialjumpforlogical-OR,alwaysprecededbytest.
Usage:
(internal state)
Parameters:
cdp[0]
holds the (signed) number of bytes by which to jump if the value is zero.
sp[0]
holds a value to compare against 0.
logComputethenaturallogarithmofavalue.
Usage:
log( value )
Parameters:
sp[0]
is the value
Returns the result in sp[0].
ltTestiffirstvalueislessthanthesecond.
Usage:
first < second
Parameters:
sp[0]
holds the second value.
sp[-1]
holds the first value.
Returns 1 in sp[0] if the first value is less than, otherwise 0.
lteTestiffirstvalueislessthanorequaltothesecond.
Usage:
first <= second
Parameters:
sp[0]
holds the second value.
sp[-1]
holds the first value.
Returns 1 in sp[0] if the first value is less than or equal, otherwise 0.
match0Testif$0matchesagivenregularexpression.
Usage:
$0 ~ regex
Parameters:
cdp[0]
holds a reference to a regular expression.
Returns 1 in sp[0] if $0 matches the regular expression, 0 otherwise.
match1Testifagivenexpressionmatchesagivenregularexpression.
Usage:
expression ~ regex
Parameters:
cdp[0]
holds a reference to a regular expression.
sp[0]
holds an expression to test.
Returns 1 in sp[0] if the expression matches the regular expression, 0 otherwise.
match2Testifanexpressioninsp[-1]matchestheregularexpressioninsp[0].
Usage:
expression ~ regex
Parameters:
sp[0]
holds a reference to a regular expression.
sp[-1]
holds an expression to test.
Returns 1 in sp[0] if the expression matches the regular expression, 0 otherwise.
mktimeConvertsadatespecificationinsystimeformattoatimestamp.
Usage:
mktime( string )
Parameters:
sp[0]
holds the date-specification string
Returns the result in sp[0].
modComputemodulus/remainderwithtwooperands.
Usage:
first % second
Parameters:
sp[0]
holds the second operand
sp[-1]
holds the first operand
Returns the remainder in sp[0].
mod_asgAssignmodulus/remainderwithtwooperands.
Usage:
first %= second
Parameters:
sp[0]
holds the second operand
cdp[0]
holds the first operand
Returns the remainder in sp[0] as well as replacing the first value.
mulComputeproductwithtwooperands.
Usage:
first * second
Parameters:
sp[0]
holds the second value
sp[-1]
holds the first value
Returns the product in sp[0].
mul_asgAssignproductwithtwooperands.
Usage:
first *= second
Parameters:
sp[0]
holds the second value
sp[-1]
holds the first value
Returns the product in sp[0] as well as replacing the first value.
neqComparetwovalues.
Usage:
first != second
Parameters:
sp[0]
is the second value
sp[-1]
is the first value
Returns 1 in sp[0] if the values are not equal, otherwise 0.
nextReadthenextrecord,restartpatterntesting.
Usage:
next
Parameters:
none
nextfileBeginprocessingthenextfilelistedonthecommandline.
Usage:
nextfile
Parameters:
none
nf_pushiPushthenumberoffields(NF)ontotheevaluationstack.
Usage:
(internal state)
Parameters:
none
notComputealogicalnegation.
Usage:
! value
Parameters:
sp[0]
holds a value to negate.
Returns the result on the evaluation stack, i.e., 0 if the value is nonzero and 1 otherwise.
ol_glReadinto$0usinggetline.
Usage:
getline
Parameters:
none
ol_gl_nrReadinto$0usinggetline,updatingNRandFNR.
Usage:
getline < file
Parameters:
none
omainStartexecutingthemainsectionofthescript(betweenBEGINandEND).
Usage:
(internal state)
Parameters:
none
popPoptheevaluationstack,discardingthevalue.
Usage:
(internal state)
Parameters:
none
pop_alFinishanarray“in”loop,deallocatingthestateinformation.
Usage:
(internal state)
Parameters:
none
post_decPost-decrementavalue.
Usage:
value --
Parameters:
sp[0]
holds the value to decrement
Returns the updated value in sp[0].
post_incPost-incrementavalue.
Usage:
value ++
Parameters:
sp[0]
holds the value to increment
Returns the updated value in sp[0].
powComputethefirstvalueraisedtothepowerofthesecondvalue.
Usage:
first ^ second
Parameters:
sp[0]
holds the second value
sp[-1]
holds the first value
Returns the result in sp[0].
pow_asgAssignthefirstvalueraisedtothepowerofthesecondvalue.
Usage:
variable = first ^ second
Parameters:
cdp[0]
is a reference to the variable which will be assigned the result
sp[0]
holds the second value
sp[-1]
holds the first value
pre_decPre-decrementavalue.
Usage:
-- value
Parameters:
sp[0]
holds the value to decrement.
Returns the updated value in sp[0];.
pre_incPre-incrementavalue.
Usage:
++ value
Parameters:
sp[0]
holds the value to decrement.
Returns the updated value in sp[0];.
pushaPusharrayaddressontostack.
Usage:
(internal state)
Parameters:
cdp[0]
array reference follows the command.
Returns the array in sp[0].
pushcPushadatacellontotheevaluationstack.
Usage:
(internal state)
Parameters:
cdp[0]
is a reference to the data to push
Returns a reference to the result in sp[0].
pushdPushadoublefloatingvalueontotheevaluationstack.
Usage:
(internal state)
Parameters:
cdp[0]
is a reference to the data to push
Returns a reference to the result in sp[0].
pushiPushcontentsofnextreferencedvariableontotheevaluationstack.
Usage:
(internal state)
Parameters:
cdp[0]
is a reference to the data cell to copy.
Returns a reference to the result in sp[0].
pushintReservethenextslotontheevaluationstack,settingitstype.
Usage:
(internal state)
Parameters:
cdp[0]
holds the type to set in the new slot, e.g., for data via I/O redirection
Returns a reference to the result in sp[0].
pushsPushareferencetoastringvalueontotheevaluationstack.
Usage:
(internal state)
Parameters:
cdp[0]
holds a reference to the string value
Returns a reference to the result in sp[0].
randReturnsarandomnumberbetweenzeroandone..
Usage:
rand()
Parameters:
none
Returns the result in sp[0].
rangeTestarangepattern:pat1,pat2{action}.
Usage:
(internal state)
Parameters:
cdp[0].op
a flag, test pat1 if on else pat2
cdp[1].op
offset of pat2 code from cdp
cdp[2].op
offset of action code from cdp
cdp[3].op
offset of code after the action from cdp
cdp[4]
start of pat1 code
sp[0]
holds arguments for the action.
retReturnafunctionvalue.
Usage:
return value
Parameters:
sp[0]
holds the return value
When calling a function, mawk saves the current stack, creating a new one. On return, mawk restores the
previous stack and returns the function value in sp[0].
ret0Returnfromafunctionwithoutprovidingareturn-value.
Usage:
return
Parameters:
sp[0]
is modified to make the value uninitialized.
As in the ret operation, mawk restores the previous stack. After the return, sp[0] is an uninitialized
value.
set_alBeginanarray“in”loop.
Usage:
for ( iterator in arrayname ) statement
Parameters:
sp[0]
holds a reference to the array
sp[-1]
holds a reference to the iteration variable
Mawk pushes a new entry onto the array loop stack, and updates cdp to point to the statement to execute.
sinComputethesineofavalueinradians.
Usage:
sin( value )
Parameters:
sp[0]
holds the value
Returns the result in sp[0].
sprintfReturnsastringconstructedfromexpression-listaccordingtoformat.
Usage:
sprintf( format [, value1 [,... ] ] )
Parameters:
sp[0]
is the last parameter value; there can be up to 255.
Returns the resulting string in sp[0].
sqrtReturnsthesquarerootofavalue.
Usage:
sqrt( value 0
Parameters:
sp[0]
is the value
Returns the result in sp[0].
srandSeedstherandomnumbergenerator.
Usage:
srand( value )
srand( )
Parameters:
sp[0]
is the seed value, which may be uninitialized
Returns the previous seed value in sp[0].
stopFinisharangepattern.
Usage:
(internal state)
Parameters:
none
strftimeFormatsthegiventimestampusingthegivenformat.
Usage:
strftime( format , timestamp , utc )
strftime( format , timestamp )
strftime( format )
strftime( )
Parameters:
Zero to three parameters may be on the stack. If all three are used, they are as follows:
sp[0]
is the utc flag
sp[-1]
is the timestamp value
sp[-2]
is the format
Returns the result in sp[0].
subSubtractthesecondvaluefromthefirst.
Usage:
first - second
Parameters:
sp[0]
holds the second value
sp[-1]
holds the first value
Returns the result in sp[0].
sub_asgAssignthedifferenceoftwovaluestoavariable.
Usage:
target = first - second
Parameters:
cdp[0]
holds a reference to the variable to which to assign the result
sp[0]
holds the second value
sp[-1]
holds the first value
Stores the difference in the target, leaving sp[0] pointing to the target.
substreturnsthesubstringofstrings,startingatindexi,oflengthn.
Usage:
substr(s,i,n)
substr(s,i)
Parameters:
Two or three parameters may be on the stack. If all three are used, they are as follows:
sp[0]
holds the length n.
sp[0]
holds the index i.
sp[0]
holds the string s.
systemExecutesacommand,returningthewait-status.
Usage:
status = system( command )
Parameters:
sp[0]
is the command to execute
Returns the wait-status in sp[0].
systimeReturnsthecurrenttimeofdayasthenumberofsecondssincetheEpoch.
Usage:
systime( )
Parameters:
none
Returns the result in sp[0].
testTestalogicalexpression.
Usage:
value
Parameters:
sp[0]
holds a value to test.
Returns the result on the evaluation stack, i.e., 1 if the value is nonzero and 0 otherwise.
tolowerCopyastring,convertingtolowercase.
Usage:
tolower( value )
Parameters:
sp[0]
is the value to convert
Returns the result in sp[0].
toupperCopyastring,convertingtouppercase.
Usage:
toupper( value )
Parameters:
sp[0]
is the value to convert
Returns the result in sp[0].
uminusUnitaryminus.
Usage:
- value
Parameters:
sp[0]
contains a value to negate. As a side-effect, if the value is a string, it is cast to double
floating point.
Returns the result in sp[0].
uplusUnitaryplus.
Usage:
+ value
Parameters:
sp[0]
contains a value to use. As a side-effect, if the value is a string, it is cast to double
floating point.
Returns the result in sp[0].
Regular Expressions
M_1J
mandatory jump
M_2JA
optional (undesirable) jump
M_2JB
optional (desirable) jump
M_2JC
pop position, optional jump (to continue looping) if advanced
M_ACCEPT
end of match
M_ANY
arbitrary character (.)
M_CLASS
character class
M_END
end of string ($)
M_ENTER
prepare an iteration by resetting the counter. This precedes a M_SAVE_POS.
M_LOOP
Like M_2JC, this is the last part of a conditional loop. It is used where one or both of the minimum and
maximum iterations are known.
M_SAVE_POS
push position onto stack, at the beginning of a loop
M_START
start of string (^)
M_STR
matching a literal string
M_U
arbitrary string (.*)
Version 1.3.4 2025-01-30 MAWK-CODE(7)
Synopsis
At startup, mawk compiles the script into byte-code. After that, it interprets the compiled byte-code.
Use the -Wdump option to show the byte-code.
