/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "). Ċ Ġ* Ġ ĠYou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠLicense Ġis Ġlocated Ġat : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// aws . amazon . com / apache 2 . 0 / Ċ Ġ* Ċ Ġ* Ġ Ġor Ġin Ġthe Ġ" license " Ġfile Ġaccompanying Ġthis Ġfile . ĠThis Ġfile Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ċ Ġ* Ġ Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . part i ql . lang . eval . builtins Ċ Ċ import Ġcom . amazon . ion .* Ċ import Ġorg . part i ql . lang . errors .* Ċ import Ġorg . part i ql . lang . eval .* Ċ import Ġorg . part i ql . lang . util .* Ċ Ċ /** Ċ Ġ* ĠBuilt Ġin Ġfunction Ġto Ġreturn Ġthe Ġsize Ġof Ġa Ġcontainer Ġtype , Ġi . e . Ġsize Ġof ĠLists , ĠStruct s Ġand ĠB ags . ĠThis Ġfunction Ċ Ġ* Ġpropag ates Ġnull Ġand Ġmissing Ġvalues Ġas Ġdescribed Ġin Ġdocs / Functions . md Ċ Ġ* Ċ Ġ* Ġsyntax : Ġ` size (< container >) ` Ġwhere Ġcontainer Ġcan Ġbe Ġa ĠB AG , ĠSTR UCT Ġor ĠLIST . Ċ Ġ*/ Ċ internal Ġclass ĠSize Expr Function ( value Factory : ĠExpr Value Factory ) Ġ: ĠNull Propag ating Expr Function (" size ", Ġ 1 , Ġvalue Factory ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġeval ( env : ĠEnvironment , Ġargs : ĠList < Expr Value >): ĠExpr Value Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcollection Ġ= Ġargs . first () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( collection . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExpr ValueType . LIST , ĠExpr ValueType . B AG , ĠExpr ValueType . STRUCT , ĠExpr ValueType . SEXP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġion Col Ġ= Ġcollection . ion Value Ġas ĠIon Container ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Factory . new Int ( ion Col . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Context Ġ= ĠProperty Value Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Context [ Property . EXPECTED _ ARGUMENT _ TYPES ] Ġ= Ġ" LIST Ġor ĠB AG Ġor ĠSTR UCT " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Context [ Property . ACT UAL _ ARGUMENT _ TYPES ] Ġ= Ġcollection . type . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Context [ Property . FUNCTION _ NAME ] Ġ= Ġ" size " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr ( message Ġ= Ġ" invalid Ġargument Ġtype Ġfor Ġsize ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorCode Ġ= ĠErrorCode . EVAL U ATOR _ IN CORRECT _ TYPE _ OF _ ARGUMENT S _ TO _ FUNC _ CALL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Context Ġ= Ġerror Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }