mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-14 18:53:35 +00:00
rebase: update kubernetes to latest
updating the kubernetes release to the latest in main go.mod Signed-off-by: Madhu Rajanna <madhupr007@gmail.com>
This commit is contained in:
committed by
mergify[bot]
parent
63c4c05b35
commit
5a66991bb3
go.modgo.sumgeneric_helpers.gomodules.txt
vendor
github.com
antlr
antlr4
antlr4-go
antlr
v4
.gitignoreLICENSEREADME.mdantlrdoc.goatn.goatn_config.goatn_config_set.goatn_deserialization_options.goatn_deserializer.goatn_simulator.goatn_state.goatn_type.gochar_stream.gocommon_token_factory.gocommon_token_stream.gocomparators.goconfiguration.godfa.godfa_serializer.godfa_state.godiagnostic_error_listener.goerror_listener.goerror_strategy.goerrors.gofile_stream.goinput_stream.goint_stream.gointerval_set.gojcollect.golexer.golexer_action.golexer_action_executor.golexer_atn_simulator.goll1_analyzer.gonostatistics.goparser.goparser_atn_simulator.goparser_rule_context.goprediction_context.goprediction_context_cache.goprediction_mode.gorecognizer.gorule_context.gosemantic_context.gostatistics.gostats_data.gotoken.gotoken_source.gotoken_stream.gotokenstream_rewriter.gotrace_listener.gotransition.gotree.gotrees.goutils.go
cenkalti
backoff
felixge
httpsnoop
fxamacker
cbor
go-openapi
swag
google
cel-go
cel
BUILD.bazeldecls.goenv.gofolding.goinlining.goio.golibrary.gomacro.gooptimizer.gooptions.goprogram.govalidator.go
checker
common
ext
interpreter
parser
pprof
profile
grpc-ecosystem
grpc-gateway
moby
prometheus
procfs
.golangci.ymlMAINTAINERS.mdMakefile.commonarp.gobuddyinfo.gocpuinfo.gocrypto.gofscache.goipvs.goloadavg.gomdstat.gomeminfo.gomountinfo.gomountstats.gonet_conntrackstat.gonet_ip_socket.gonet_sockstat.gonet_softnet.gonet_tls_stat.gonet_unix.gonet_wireless.goproc.goproc_limits.goproc_ns.goproc_psi.goproc_smaps.goproc_stat.goproc_status.goproc_sys.gosoftirqs.gostat.goswaps.gothread.gozoneinfo.go
sirupsen
spf13
cobra
.golangci.ymlREADME.mdactive_help.goactive_help.mdargs.gobash_completions.gobash_completions.mdbash_completionsV2.gocobra.gocommand.gocompletions.gofish_completions.gofish_completions.mdflag_groups.gopowershell_completions.gopowershell_completions.mdprojects_using_cobra.mdshell_completions.mduser_guide.mdzsh_completions.md
stoewer
x448
go.etcd.io
etcd
api
v3
version
client
go.opentelemetry.io
contrib
instrumentation
google.golang.org
grpc
net
http
otel
.codespellignore.codespellrc.gitmodules.golangci.ymlCHANGELOG.mdCODEOWNERSCONTRIBUTING.mdMakefileREADME.mdRELEASING.mdget_main_pkgs.shhandler.gotrace.go
attribute
baggage
codes
doc.goerror_handler.goexporters
otlp
otlptrace
README.mdclients.godoc.goexporter.go
internal
tracetransform
otlptracegrpc
README.mdclient.godoc.goexporter.go
version.gointernal
options.gointernal
internal_logging.gometric.gometric
README.mdasyncfloat64.goasyncint64.goconfig.godoc.go
propagation.goembedded
instrument.gometer.gonoop
syncfloat64.gosyncint64.gopropagation
renovate.jsonrequirements.txtsdk
README.md
instrumentation
internal
resource
README.mdauto.gobuiltin.goconfig.gocontainer.godoc.goenv.gohost_id.gohost_id_bsd.gohost_id_darwin.gohost_id_exec.gohost_id_linux.gohost_id_readfile.gohost_id_unsupported.gohost_id_windows.goos.goos_release_darwin.goos_release_unix.goos_unix.goos_unsupported.goos_windows.goprocess.goresource.go
trace
README.mdbatch_span_processor.godoc.goevent.goevictedqueue.goid_generator.golink.goprovider.gosampler_env.gosampling.gosimple_span_processor.gosnapshot.gospan.gospan_exporter.gospan_limits.gospan_processor.gotracer.goversion.go
version.gosemconv
internal
v1.12.0
v1.17.0
v1.20.0
v1.21.0
v1.24.0
v1.26.0
trace
verify_examples.shverify_readmes.shversion.goversions.yamlproto
otlp
trace
golang.org
x
time
rate
gopkg.in
k8s.io
api
admission
admissionregistration
v1
v1alpha1
v1beta1
apidiscovery
apiserverinternal
v1alpha1
apps
v1
v1beta1
v1beta2
authentication
v1
v1alpha1
v1beta1
authorization
v1
doc.gogenerated.pb.gogenerated.prototypes.gotypes_swagger_doc_generated.gozz_generated.deepcopy.gozz_generated.prerelease-lifecycle.go
v1beta1
autoscaling
v1
v2
v2beta1
v2beta2
batch
v1
v1beta1
certificates
v1
v1alpha1
v1beta1
coordination
v1
doc.gogenerated.pb.gogenerated.prototypes.gotypes_swagger_doc_generated.gozz_generated.deepcopy.gozz_generated.prerelease-lifecycle.go
v1alpha1
doc.gogenerated.pb.gogenerated.protoregister.gotypes.gotypes_swagger_doc_generated.gozz_generated.deepcopy.gozz_generated.prerelease-lifecycle.go
v1beta1
core
v1
discovery
events
extensions
v1beta1
flowcontrol
v1
v1beta1
v1beta2
v1beta3
imagepolicy
v1alpha1
networking
v1
v1alpha1
v1beta1
node
v1
v1alpha1
v1beta1
policy
rbac
v1
v1alpha1
v1beta1
resource
v1alpha2
v1alpha3
scheduling
v1
v1alpha1
v1beta1
storage
v1
v1alpha1
v1beta1
storagemigration
v1alpha1
apiextensions-apiserver
pkg
apimachinery
pkg
api
apis
meta
labels
runtime
util
framer
httpstream
intstr
runtime
sets
strategicpatch
version
watch
apiserver
pkg
admission
plugin
cel
policy
internal
generic
validating
webhook
mutating
apis
authentication
authenticatorfactory
request
authorization
cel
endpoints
filters
handlers
request
features
registry
server
config.godeleted_kinds.go
dynamiccertificates
filters
genericapiserver.gohealthz.gohealthz
hooks.gohttplog
mux
options
admission.goauthentication.godeprecated_insecure_serving.go
encryptionconfig
etcd.gofeature.gorecommended.goserver_run_options.goserving.goroutine
storage
storage_readiness_hook.gostorage
util
feature
flowcontrol
version
webhook
plugin
pkg
authorizer
webhook
client-go
applyconfigurations
OWNERSdoc.goutils.go
admissionregistration
v1
auditannotation.goexpressionwarning.gomatchcondition.gomatchresources.gomutatingwebhook.gomutatingwebhookconfiguration.gonamedrulewithoperations.goparamkind.goparamref.gorule.gorulewithoperations.goservicereference.gotypechecking.govalidatingadmissionpolicy.govalidatingadmissionpolicybinding.govalidatingadmissionpolicybindingspec.govalidatingadmissionpolicyspec.govalidatingadmissionpolicystatus.govalidatingwebhook.govalidatingwebhookconfiguration.govalidation.govariable.gowebhookclientconfig.go
v1alpha1
auditannotation.goexpressionwarning.gomatchcondition.gomatchresources.gonamedrulewithoperations.goparamkind.goparamref.gotypechecking.govalidatingadmissionpolicy.govalidatingadmissionpolicybinding.govalidatingadmissionpolicybindingspec.govalidatingadmissionpolicyspec.govalidatingadmissionpolicystatus.govalidation.govariable.go
v1beta1
auditannotation.goexpressionwarning.gomatchcondition.gomatchresources.gomutatingwebhook.gomutatingwebhookconfiguration.gonamedrulewithoperations.goparamkind.goparamref.goservicereference.gotypechecking.govalidatingadmissionpolicy.govalidatingadmissionpolicybinding.govalidatingadmissionpolicybindingspec.govalidatingadmissionpolicyspec.govalidatingadmissionpolicystatus.govalidatingwebhook.govalidatingwebhookconfiguration.govalidation.govariable.gowebhookclientconfig.go
apiserverinternal
apps
v1
controllerrevision.godaemonset.godaemonsetcondition.godaemonsetspec.godaemonsetstatus.godaemonsetupdatestrategy.godeployment.godeploymentcondition.godeploymentspec.godeploymentstatus.godeploymentstrategy.goreplicaset.goreplicasetcondition.goreplicasetspec.goreplicasetstatus.gorollingupdatedaemonset.gorollingupdatedeployment.gorollingupdatestatefulsetstrategy.gostatefulset.gostatefulsetcondition.gostatefulsetordinals.gostatefulsetpersistentvolumeclaimretentionpolicy.gostatefulsetspec.gostatefulsetstatus.gostatefulsetupdatestrategy.go
v1beta1
controllerrevision.godeployment.godeploymentcondition.godeploymentspec.godeploymentstatus.godeploymentstrategy.gorollbackconfig.gorollingupdatedeployment.gorollingupdatestatefulsetstrategy.gostatefulset.gostatefulsetcondition.gostatefulsetordinals.gostatefulsetpersistentvolumeclaimretentionpolicy.gostatefulsetspec.gostatefulsetstatus.gostatefulsetupdatestrategy.go
v1beta2
controllerrevision.godaemonset.godaemonsetcondition.godaemonsetspec.godaemonsetstatus.godaemonsetupdatestrategy.godeployment.godeploymentcondition.godeploymentspec.godeploymentstatus.godeploymentstrategy.goreplicaset.goreplicasetcondition.goreplicasetspec.goreplicasetstatus.gorollingupdatedaemonset.gorollingupdatedeployment.gorollingupdatestatefulsetstrategy.goscale.gostatefulset.gostatefulsetcondition.gostatefulsetordinals.gostatefulsetpersistentvolumeclaimretentionpolicy.gostatefulsetspec.gostatefulsetstatus.gostatefulsetupdatestrategy.go
autoscaling
v1
crossversionobjectreference.gohorizontalpodautoscaler.gohorizontalpodautoscalerspec.gohorizontalpodautoscalerstatus.goscale.goscalespec.goscalestatus.go
v2
containerresourcemetricsource.gocontainerresourcemetricstatus.gocrossversionobjectreference.goexternalmetricsource.goexternalmetricstatus.gohorizontalpodautoscaler.gohorizontalpodautoscalerbehavior.gohorizontalpodautoscalercondition.gohorizontalpodautoscalerspec.gohorizontalpodautoscalerstatus.gohpascalingpolicy.gohpascalingrules.gometricidentifier.gometricspec.gometricstatus.gometrictarget.gometricvaluestatus.goobjectmetricsource.goobjectmetricstatus.gopodsmetricsource.gopodsmetricstatus.goresourcemetricsource.goresourcemetricstatus.go
v2beta1
containerresourcemetricsource.gocontainerresourcemetricstatus.gocrossversionobjectreference.goexternalmetricsource.goexternalmetricstatus.gohorizontalpodautoscaler.gohorizontalpodautoscalercondition.gohorizontalpodautoscalerspec.gohorizontalpodautoscalerstatus.gometricspec.gometricstatus.goobjectmetricsource.goobjectmetricstatus.gopodsmetricsource.gopodsmetricstatus.goresourcemetricsource.goresourcemetricstatus.go
v2beta2
containerresourcemetricsource.gocontainerresourcemetricstatus.gocrossversionobjectreference.goexternalmetricsource.goexternalmetricstatus.gohorizontalpodautoscaler.gohorizontalpodautoscalerbehavior.gohorizontalpodautoscalercondition.gohorizontalpodautoscalerspec.gohorizontalpodautoscalerstatus.gohpascalingpolicy.gohpascalingrules.gometricidentifier.gometricspec.gometricstatus.gometrictarget.gometricvaluestatus.goobjectmetricsource.goobjectmetricstatus.gopodsmetricsource.gopodsmetricstatus.goresourcemetricsource.goresourcemetricstatus.go
batch
v1
cronjob.gocronjobspec.gocronjobstatus.gojob.gojobcondition.gojobspec.gojobstatus.gojobtemplatespec.gopodfailurepolicy.gopodfailurepolicyonexitcodesrequirement.gopodfailurepolicyonpodconditionspattern.gopodfailurepolicyrule.gosuccesspolicy.gosuccesspolicyrule.gouncountedterminatedpods.go
v1beta1
certificates
v1
certificatesigningrequest.gocertificatesigningrequestcondition.gocertificatesigningrequestspec.gocertificatesigningrequeststatus.go
v1alpha1
v1beta1
coordination
core
v1
affinity.goapparmorprofile.goattachedvolume.goawselasticblockstorevolumesource.goazurediskvolumesource.goazurefilepersistentvolumesource.goazurefilevolumesource.gocapabilities.gocephfspersistentvolumesource.gocephfsvolumesource.gocinderpersistentvolumesource.gocindervolumesource.goclaimsource.goclientipconfig.goclustertrustbundleprojection.gocomponentcondition.gocomponentstatus.goconfigmap.goconfigmapenvsource.goconfigmapkeyselector.goconfigmapnodeconfigsource.goconfigmapprojection.goconfigmapvolumesource.gocontainer.gocontainerimage.gocontainerport.gocontainerresizepolicy.gocontainerstate.gocontainerstaterunning.gocontainerstateterminated.gocontainerstatewaiting.gocontainerstatus.gocontaineruser.gocsipersistentvolumesource.gocsivolumesource.godaemonendpoint.godownwardapiprojection.godownwardapivolumefile.godownwardapivolumesource.goemptydirvolumesource.goendpointaddress.goendpointport.goendpoints.goendpointsubset.goenvfromsource.goenvvar.goenvvarsource.goephemeralcontainer.goephemeralcontainercommon.goephemeralvolumesource.goevent.goeventseries.goeventsource.goexecaction.gofcvolumesource.goflexpersistentvolumesource.goflexvolumesource.goflockervolumesource.gogcepersistentdiskvolumesource.gogitrepovolumesource.goglusterfspersistentvolumesource.goglusterfsvolumesource.gogrpcaction.gohostalias.gohostip.gohostpathvolumesource.gohttpgetaction.gohttpheader.goimagevolumesource.goiscsipersistentvolumesource.goiscsivolumesource.gokeytopath.golifecycle.golifecyclehandler.golimitrange.golimitrangeitem.golimitrangespec.golinuxcontaineruser.goloadbalanceringress.goloadbalancerstatus.golocalobjectreference.golocalvolumesource.gomodifyvolumestatus.gonamespace.gonamespacecondition.gonamespacespec.gonamespacestatus.gonfsvolumesource.gonode.gonodeaddress.gonodeaffinity.gonodecondition.gonodeconfigsource.gonodeconfigstatus.gonodedaemonendpoints.gonodefeatures.gonoderuntimehandler.gonoderuntimehandlerfeatures.gonodeselector.gonodeselectorrequirement.gonodeselectorterm.gonodespec.gonodestatus.gonodesysteminfo.goobjectfieldselector.goobjectreference.gopersistentvolume.gopersistentvolumeclaim.gopersistentvolumeclaimcondition.gopersistentvolumeclaimspec.gopersistentvolumeclaimstatus.gopersistentvolumeclaimtemplate.gopersistentvolumeclaimvolumesource.gopersistentvolumesource.gopersistentvolumespec.gopersistentvolumestatus.gophotonpersistentdiskvolumesource.gopod.gopodaffinity.gopodaffinityterm.gopodantiaffinity.gopodcondition.gopoddnsconfig.gopoddnsconfigoption.gopodip.gopodos.gopodreadinessgate.gopodresourceclaim.gopodresourceclaimstatus.gopodschedulinggate.gopodsecuritycontext.gopodspec.gopodstatus.gopodtemplate.gopodtemplatespec.goportstatus.goportworxvolumesource.gopreferredschedulingterm.goprobe.goprobehandler.goprojectedvolumesource.goquobytevolumesource.gorbdpersistentvolumesource.gorbdvolumesource.goreplicationcontroller.goreplicationcontrollercondition.goreplicationcontrollerspec.goreplicationcontrollerstatus.goresourceclaim.goresourcefieldselector.goresourcehealth.goresourcequota.goresourcequotaspec.goresourcequotastatus.goresourcerequirements.goresourcestatus.goscaleiopersistentvolumesource.goscaleiovolumesource.goscopedresourceselectorrequirement.goscopeselector.goseccompprofile.gosecret.gosecretenvsource.gosecretkeyselector.gosecretprojection.gosecretreference.gosecretvolumesource.gosecuritycontext.goselinuxoptions.goservice.goserviceaccount.goserviceaccounttokenprojection.goserviceport.goservicespec.goservicestatus.gosessionaffinityconfig.gosleepaction.gostorageospersistentvolumesource.gostorageosvolumesource.gosysctl.gotaint.gotcpsocketaction.gotoleration.gotopologyselectorlabelrequirement.gotopologyselectorterm.gotopologyspreadconstraint.gotypedlocalobjectreference.gotypedobjectreference.govolume.govolumedevice.govolumemount.govolumemountstatus.govolumenodeaffinity.govolumeprojection.govolumeresourcerequirements.govolumesource.govspherevirtualdiskvolumesource.goweightedpodaffinityterm.gowindowssecuritycontextoptions.go
discovery
v1
v1beta1
events
extensions
v1beta1
daemonset.godaemonsetcondition.godaemonsetspec.godaemonsetstatus.godaemonsetupdatestrategy.godeployment.godeploymentcondition.godeploymentspec.godeploymentstatus.godeploymentstrategy.gohttpingresspath.gohttpingressrulevalue.goingress.goingressbackend.goingressloadbalanceringress.goingressloadbalancerstatus.goingressportstatus.goingressrule.goingressrulevalue.goingressspec.goingressstatus.goingresstls.goipblock.gonetworkpolicy.gonetworkpolicyegressrule.gonetworkpolicyingressrule.gonetworkpolicypeer.gonetworkpolicyport.gonetworkpolicyspec.goreplicaset.goreplicasetcondition.goreplicasetspec.goreplicasetstatus.gorollbackconfig.gorollingupdatedaemonset.gorollingupdatedeployment.goscale.go
flowcontrol
v1
exemptprioritylevelconfiguration.goflowdistinguishermethod.goflowschema.goflowschemacondition.goflowschemaspec.goflowschemastatus.gogroupsubject.golimitedprioritylevelconfiguration.golimitresponse.gononresourcepolicyrule.gopolicyruleswithsubjects.goprioritylevelconfiguration.goprioritylevelconfigurationcondition.goprioritylevelconfigurationreference.goprioritylevelconfigurationspec.goprioritylevelconfigurationstatus.goqueuingconfiguration.goresourcepolicyrule.goserviceaccountsubject.gosubject.gousersubject.go
v1beta1
exemptprioritylevelconfiguration.goflowdistinguishermethod.goflowschema.goflowschemacondition.goflowschemaspec.goflowschemastatus.gogroupsubject.golimitedprioritylevelconfiguration.golimitresponse.gononresourcepolicyrule.gopolicyruleswithsubjects.goprioritylevelconfiguration.goprioritylevelconfigurationcondition.goprioritylevelconfigurationreference.goprioritylevelconfigurationspec.goprioritylevelconfigurationstatus.goqueuingconfiguration.goresourcepolicyrule.goserviceaccountsubject.gosubject.gousersubject.go
v1beta2
exemptprioritylevelconfiguration.goflowdistinguishermethod.goflowschema.goflowschemacondition.goflowschemaspec.goflowschemastatus.gogroupsubject.golimitedprioritylevelconfiguration.golimitresponse.gononresourcepolicyrule.gopolicyruleswithsubjects.goprioritylevelconfiguration.goprioritylevelconfigurationcondition.goprioritylevelconfigurationreference.goprioritylevelconfigurationspec.goprioritylevelconfigurationstatus.goqueuingconfiguration.goresourcepolicyrule.goserviceaccountsubject.gosubject.gousersubject.go
v1beta3
exemptprioritylevelconfiguration.goflowdistinguishermethod.goflowschema.goflowschemacondition.goflowschemaspec.goflowschemastatus.gogroupsubject.golimitedprioritylevelconfiguration.golimitresponse.gononresourcepolicyrule.gopolicyruleswithsubjects.goprioritylevelconfiguration.goprioritylevelconfigurationcondition.goprioritylevelconfigurationreference.goprioritylevelconfigurationspec.goprioritylevelconfigurationstatus.goqueuingconfiguration.goresourcepolicyrule.goserviceaccountsubject.gosubject.gousersubject.go
imagepolicy
internal
meta
v1
networking
v1
httpingresspath.gohttpingressrulevalue.goingress.goingressbackend.goingressclass.goingressclassparametersreference.goingressclassspec.goingressloadbalanceringress.goingressloadbalancerstatus.goingressportstatus.goingressrule.goingressrulevalue.goingressservicebackend.goingressspec.goingressstatus.goingresstls.goipblock.gonetworkpolicy.gonetworkpolicyegressrule.gonetworkpolicyingressrule.gonetworkpolicypeer.gonetworkpolicyport.gonetworkpolicyspec.goservicebackendport.go
v1alpha1
v1beta1
httpingresspath.gohttpingressrulevalue.goingress.goingressbackend.goingressclass.goingressclassparametersreference.goingressclassspec.goingressloadbalanceringress.goingressloadbalancerstatus.goingressportstatus.goingressrule.goingressrulevalue.goingressspec.goingressstatus.goingresstls.goipaddress.goipaddressspec.goparentreference.goservicecidr.goservicecidrspec.goservicecidrstatus.go
node
v1
v1alpha1
v1beta1
policy
v1
v1beta1
rbac
v1
aggregationrule.goclusterrole.goclusterrolebinding.gopolicyrule.gorole.gorolebinding.goroleref.gosubject.go
v1alpha1
aggregationrule.goclusterrole.goclusterrolebinding.gopolicyrule.gorole.gorolebinding.goroleref.gosubject.go
v1beta1
resource
v1alpha2
allocationresult.goallocationresultmodel.godriverallocationresult.godriverrequests.gonamedresourcesattribute.gonamedresourcesattributevalue.gonamedresourcesfilter.gonamedresourcesrequest.gonamedresourcesresources.gonamedresourcesstringslice.goresourceclaimparameters.goresourceclaimparametersreference.goresourceclaimspec.goresourceclass.goresourceclassparameters.goresourcefilter.goresourcefiltermodel.goresourcehandle.goresourcemodel.goresourcerequest.goresourcerequestmodel.gostructuredresourcehandle.go
v1alpha3
allocationresult.gobasicdevice.goceldeviceselector.godevice.godeviceallocationconfiguration.godeviceallocationresult.godeviceattribute.godeviceclaim.godeviceclaimconfiguration.godeviceclass.godeviceclassconfiguration.godeviceclassspec.godeviceconfiguration.godeviceconstraint.godevicerequest.godevicerequestallocationresult.godeviceselector.goopaquedeviceconfiguration.gopodschedulingcontext.gopodschedulingcontextspec.gopodschedulingcontextstatus.goresourceclaim.goresourceclaimconsumerreference.goresourceclaimschedulingstatus.goresourceclaimspec.goresourceclaimstatus.goresourceclaimtemplate.goresourceclaimtemplatespec.goresourcepool.goresourceslice.goresourceslicespec.go
scheduling
storage
v1
csidriver.gocsidriverspec.gocsinode.gocsinodedriver.gocsinodespec.gocsistoragecapacity.gostorageclass.gotokenrequest.govolumeattachment.govolumeattachmentsource.govolumeattachmentspec.govolumeattachmentstatus.govolumeerror.govolumenoderesources.go
v1alpha1
csistoragecapacity.govolumeattachment.govolumeattachmentsource.govolumeattachmentspec.govolumeattachmentstatus.govolumeattributesclass.govolumeerror.go
v1beta1
storagemigration
v1alpha1
discovery
fake
dynamic
features
gentype
informers
kubernetes
clientset.go
fake
scheme
typed
admissionregistration
v1
fake
fake_mutatingwebhookconfiguration.gofake_validatingadmissionpolicy.gofake_validatingadmissionpolicybinding.gofake_validatingwebhookconfiguration.go
mutatingwebhookconfiguration.govalidatingadmissionpolicy.govalidatingadmissionpolicybinding.govalidatingwebhookconfiguration.gov1alpha1
v1beta1
apiserverinternal
v1alpha1
apps
v1
v1beta1
v1beta2
authentication
v1
v1alpha1
v1beta1
authorization
v1
fake
fake_localsubjectaccessreview.gofake_selfsubjectaccessreview.gofake_selfsubjectrulesreview.gofake_subjectaccessreview.go
localsubjectaccessreview.goselfsubjectaccessreview.goselfsubjectrulesreview.gosubjectaccessreview.gov1beta1
autoscaling
v1
v2
v2beta1
v2beta2
batch
certificates
v1
v1alpha1
v1beta1
coordination
core
v1
componentstatus.goconfigmap.goendpoints.goevent.goevent_expansion.go
fake
fake_componentstatus.gofake_configmap.gofake_endpoints.gofake_event.gofake_limitrange.gofake_namespace.gofake_node.gofake_persistentvolume.gofake_persistentvolumeclaim.gofake_pod.gofake_podtemplate.gofake_replicationcontroller.gofake_resourcequota.gofake_secret.gofake_service.gofake_serviceaccount.go
limitrange.gonamespace.gonamespace_expansion.gonode.gonode_expansion.gopersistentvolume.gopersistentvolumeclaim.gopod.gopod_expansion.gopodtemplate.goreplicationcontroller.goresourcequota.gosecret.goservice.goservice_expansion.goserviceaccount.godiscovery
events
extensions
v1beta1
flowcontrol
v1
v1beta1
v1beta2
v1beta3
networking
node
v1
v1alpha1
v1beta1
policy
v1
v1beta1
rbac
v1
v1alpha1
v1beta1
resource
v1alpha2
fake
podschedulingcontext.goresourceclaim.goresourceclaimparameters.goresourceclaimtemplate.goresourceclass.goresourceclassparameters.goresourceslice.gov1alpha3
scheduling
v1
v1alpha1
v1beta1
storage
v1
csidriver.gocsinode.gocsistoragecapacity.go
fake
fake_csidriver.gofake_csinode.gofake_csistoragecapacity.gofake_storageclass.gofake_volumeattachment.go
storageclass.govolumeattachment.gov1alpha1
v1beta1
storagemigration
listers
admissionregistration
v1
mutatingwebhookconfiguration.govalidatingadmissionpolicy.govalidatingadmissionpolicybinding.govalidatingwebhookconfiguration.go
v1alpha1
v1beta1
apiserverinternal
v1alpha1
apps
v1
v1beta1
v1beta2
autoscaling
v1
v2
v2beta1
v2beta2
batch
certificates
coordination
core
v1
discovery
doc.goevents
extensions
flowcontrol
v1
v1beta1
v1beta2
v1beta3
networking
v1
v1alpha1
v1beta1
node
policy
rbac
v1
v1alpha1
v1beta1
resource
v1alpha2
v1alpha3
scheduling
storage
v1
v1alpha1
v1beta1
storagemigration
v1alpha1
rest
testing
tools
cache
clientcmd
leaderelection
portforward
record
remotecommand
watch
transport
util
cloud-provider
options
component-base
cli
featuregate
logs
metrics
testutil
tracing
version
component-helpers
kubelet
pkg
apis
stats
v1alpha1
kubernetes
pkg
apis
apps
batch
core
features
securitycontext
util
filesystem
volume
test
e2e
framework
.import-restrictions
debug
expect.goframework.goginkgowrapper.gometrics
node
pod
pv
skipper
ssh
test_context.goutil.gostorage
testing-manifests
scheduling
statefulset
etcd
storage-csi
external-attacher
external-health-monitor
external-health-monitor-controller
external-provisioner
external-resizer
external-snapshotter
csi-snapshotter
hostpath
mock
utils
pod-security-admission
utils
sigs.k8s.io
apiserver-network-proxy
konnectivity-client
proto
9
vendor/github.com/google/cel-go/parser/BUILD.bazel
generated
vendored
9
vendor/github.com/google/cel-go/parser/BUILD.bazel
generated
vendored
@ -20,10 +20,13 @@ go_library(
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//common:go_default_library",
|
||||
"//common/ast:go_default_library",
|
||||
"//common/operators:go_default_library",
|
||||
"//common/runes:go_default_library",
|
||||
"//common/types:go_default_library",
|
||||
"//common/types/ref:go_default_library",
|
||||
"//parser/gen:go_default_library",
|
||||
"@com_github_antlr_antlr4_runtime_go_antlr_v4//:go_default_library",
|
||||
"@com_github_antlr4_go_antlr_v4//:go_default_library",
|
||||
"@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library",
|
||||
"@org_golang_google_protobuf//proto:go_default_library",
|
||||
"@org_golang_google_protobuf//types/known/structpb:go_default_library",
|
||||
@ -43,10 +46,12 @@ go_test(
|
||||
":go_default_library",
|
||||
],
|
||||
deps = [
|
||||
"//common/ast:go_default_library",
|
||||
"//common/debug:go_default_library",
|
||||
"//common/types:go_default_library",
|
||||
"//parser/gen:go_default_library",
|
||||
"//test:go_default_library",
|
||||
"@com_github_antlr_antlr4_runtime_go_antlr_v4//:go_default_library",
|
||||
"@com_github_antlr4_go_antlr_v4//:go_default_library",
|
||||
"@org_golang_google_protobuf//proto:go_default_library",
|
||||
"@org_golang_google_protobuf//testing/protocmp:go_default_library",
|
||||
],
|
||||
|
2
vendor/github.com/google/cel-go/parser/gen/BUILD.bazel
generated
vendored
2
vendor/github.com/google/cel-go/parser/gen/BUILD.bazel
generated
vendored
@ -21,6 +21,6 @@ go_library(
|
||||
],
|
||||
importpath = "github.com/google/cel-go/parser/gen",
|
||||
deps = [
|
||||
"@com_github_antlr_antlr4_runtime_go_antlr_v4//:go_default_library",
|
||||
"@com_github_antlr4_go_antlr_v4//:go_default_library",
|
||||
],
|
||||
)
|
||||
|
4
vendor/github.com/google/cel-go/parser/gen/cel_base_listener.go
generated
vendored
4
vendor/github.com/google/cel-go/parser/gen/cel_base_listener.go
generated
vendored
@ -1,7 +1,7 @@
|
||||
// Code generated from /Users/tswadell/go/src/github.com/google/cel-go/parser/gen/CEL.g4 by ANTLR 4.12.0. DO NOT EDIT.
|
||||
// Code generated from /usr/local/google/home/tswadell/go/src/github.com/google/cel-go/parser/gen/CEL.g4 by ANTLR 4.13.1. DO NOT EDIT.
|
||||
|
||||
package gen // CEL
|
||||
import "github.com/antlr/antlr4/runtime/Go/antlr/v4"
|
||||
import "github.com/antlr4-go/antlr/v4"
|
||||
|
||||
// BaseCELListener is a complete listener for a parse tree produced by CELParser.
|
||||
type BaseCELListener struct{}
|
||||
|
5
vendor/github.com/google/cel-go/parser/gen/cel_base_visitor.go
generated
vendored
5
vendor/github.com/google/cel-go/parser/gen/cel_base_visitor.go
generated
vendored
@ -1,7 +1,8 @@
|
||||
// Code generated from /Users/tswadell/go/src/github.com/google/cel-go/parser/gen/CEL.g4 by ANTLR 4.12.0. DO NOT EDIT.
|
||||
// Code generated from /usr/local/google/home/tswadell/go/src/github.com/google/cel-go/parser/gen/CEL.g4 by ANTLR 4.13.1. DO NOT EDIT.
|
||||
|
||||
package gen // CEL
|
||||
import "github.com/antlr/antlr4/runtime/Go/antlr/v4"
|
||||
import "github.com/antlr4-go/antlr/v4"
|
||||
|
||||
|
||||
type BaseCELVisitor struct {
|
||||
*antlr.BaseParseTreeVisitor
|
||||
|
603
vendor/github.com/google/cel-go/parser/gen/cel_lexer.go
generated
vendored
603
vendor/github.com/google/cel-go/parser/gen/cel_lexer.go
generated
vendored
@ -1,280 +1,278 @@
|
||||
// Code generated from /Users/tswadell/go/src/github.com/google/cel-go/parser/gen/CEL.g4 by ANTLR 4.12.0. DO NOT EDIT.
|
||||
// Code generated from /usr/local/google/home/tswadell/go/src/github.com/google/cel-go/parser/gen/CEL.g4 by ANTLR 4.13.1. DO NOT EDIT.
|
||||
|
||||
package gen
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
"sync"
|
||||
"unicode"
|
||||
|
||||
"github.com/antlr/antlr4/runtime/Go/antlr/v4"
|
||||
"github.com/antlr4-go/antlr/v4"
|
||||
)
|
||||
|
||||
// Suppress unused import error
|
||||
var _ = fmt.Printf
|
||||
var _ = sync.Once{}
|
||||
var _ = unicode.IsLetter
|
||||
|
||||
|
||||
type CELLexer struct {
|
||||
*antlr.BaseLexer
|
||||
channelNames []string
|
||||
modeNames []string
|
||||
modeNames []string
|
||||
// TODO: EOF string
|
||||
}
|
||||
|
||||
var cellexerLexerStaticData struct {
|
||||
once sync.Once
|
||||
serializedATN []int32
|
||||
channelNames []string
|
||||
modeNames []string
|
||||
literalNames []string
|
||||
symbolicNames []string
|
||||
ruleNames []string
|
||||
predictionContextCache *antlr.PredictionContextCache
|
||||
atn *antlr.ATN
|
||||
decisionToDFA []*antlr.DFA
|
||||
var CELLexerLexerStaticData struct {
|
||||
once sync.Once
|
||||
serializedATN []int32
|
||||
ChannelNames []string
|
||||
ModeNames []string
|
||||
LiteralNames []string
|
||||
SymbolicNames []string
|
||||
RuleNames []string
|
||||
PredictionContextCache *antlr.PredictionContextCache
|
||||
atn *antlr.ATN
|
||||
decisionToDFA []*antlr.DFA
|
||||
}
|
||||
|
||||
func cellexerLexerInit() {
|
||||
staticData := &cellexerLexerStaticData
|
||||
staticData.channelNames = []string{
|
||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN",
|
||||
}
|
||||
staticData.modeNames = []string{
|
||||
"DEFAULT_MODE",
|
||||
}
|
||||
staticData.literalNames = []string{
|
||||
"", "'=='", "'!='", "'in'", "'<'", "'<='", "'>='", "'>'", "'&&'", "'||'",
|
||||
"'['", "']'", "'{'", "'}'", "'('", "')'", "'.'", "','", "'-'", "'!'",
|
||||
"'?'", "':'", "'+'", "'*'", "'/'", "'%'", "'true'", "'false'", "'null'",
|
||||
}
|
||||
staticData.symbolicNames = []string{
|
||||
"", "EQUALS", "NOT_EQUALS", "IN", "LESS", "LESS_EQUALS", "GREATER_EQUALS",
|
||||
"GREATER", "LOGICAL_AND", "LOGICAL_OR", "LBRACKET", "RPRACKET", "LBRACE",
|
||||
"RBRACE", "LPAREN", "RPAREN", "DOT", "COMMA", "MINUS", "EXCLAM", "QUESTIONMARK",
|
||||
"COLON", "PLUS", "STAR", "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE",
|
||||
"NUL", "WHITESPACE", "COMMENT", "NUM_FLOAT", "NUM_INT", "NUM_UINT",
|
||||
"STRING", "BYTES", "IDENTIFIER",
|
||||
}
|
||||
staticData.ruleNames = []string{
|
||||
"EQUALS", "NOT_EQUALS", "IN", "LESS", "LESS_EQUALS", "GREATER_EQUALS",
|
||||
"GREATER", "LOGICAL_AND", "LOGICAL_OR", "LBRACKET", "RPRACKET", "LBRACE",
|
||||
"RBRACE", "LPAREN", "RPAREN", "DOT", "COMMA", "MINUS", "EXCLAM", "QUESTIONMARK",
|
||||
"COLON", "PLUS", "STAR", "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE",
|
||||
"NUL", "BACKSLASH", "LETTER", "DIGIT", "EXPONENT", "HEXDIGIT", "RAW",
|
||||
"ESC_SEQ", "ESC_CHAR_SEQ", "ESC_OCT_SEQ", "ESC_BYTE_SEQ", "ESC_UNI_SEQ",
|
||||
"WHITESPACE", "COMMENT", "NUM_FLOAT", "NUM_INT", "NUM_UINT", "STRING",
|
||||
"BYTES", "IDENTIFIER",
|
||||
}
|
||||
staticData.predictionContextCache = antlr.NewPredictionContextCache()
|
||||
staticData.serializedATN = []int32{
|
||||
4, 0, 36, 423, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2,
|
||||
4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2,
|
||||
10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15,
|
||||
7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7,
|
||||
20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25,
|
||||
2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2,
|
||||
31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36,
|
||||
7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7,
|
||||
41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46,
|
||||
1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4,
|
||||
1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8,
|
||||
1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13,
|
||||
1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1,
|
||||
19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24,
|
||||
1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1,
|
||||
26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29,
|
||||
1, 30, 1, 30, 1, 31, 1, 31, 3, 31, 177, 8, 31, 1, 31, 4, 31, 180, 8, 31,
|
||||
11, 31, 12, 31, 181, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1,
|
||||
34, 3, 34, 192, 8, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36,
|
||||
1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1,
|
||||
38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38,
|
||||
1, 38, 1, 38, 1, 38, 3, 38, 225, 8, 38, 1, 39, 4, 39, 228, 8, 39, 11, 39,
|
||||
12, 39, 229, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 238, 8, 40,
|
||||
10, 40, 12, 40, 241, 9, 40, 1, 40, 1, 40, 1, 41, 4, 41, 246, 8, 41, 11,
|
||||
41, 12, 41, 247, 1, 41, 1, 41, 4, 41, 252, 8, 41, 11, 41, 12, 41, 253,
|
||||
1, 41, 3, 41, 257, 8, 41, 1, 41, 4, 41, 260, 8, 41, 11, 41, 12, 41, 261,
|
||||
1, 41, 1, 41, 1, 41, 1, 41, 4, 41, 268, 8, 41, 11, 41, 12, 41, 269, 1,
|
||||
41, 3, 41, 273, 8, 41, 3, 41, 275, 8, 41, 1, 42, 4, 42, 278, 8, 42, 11,
|
||||
42, 12, 42, 279, 1, 42, 1, 42, 1, 42, 1, 42, 4, 42, 286, 8, 42, 11, 42,
|
||||
12, 42, 287, 3, 42, 290, 8, 42, 1, 43, 4, 43, 293, 8, 43, 11, 43, 12, 43,
|
||||
294, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 4, 43, 303, 8, 43, 11, 43,
|
||||
12, 43, 304, 1, 43, 1, 43, 3, 43, 309, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44,
|
||||
314, 8, 44, 10, 44, 12, 44, 317, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5,
|
||||
44, 323, 8, 44, 10, 44, 12, 44, 326, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44,
|
||||
1, 44, 1, 44, 1, 44, 5, 44, 335, 8, 44, 10, 44, 12, 44, 338, 9, 44, 1,
|
||||
44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 349,
|
||||
8, 44, 10, 44, 12, 44, 352, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1,
|
||||
44, 5, 44, 360, 8, 44, 10, 44, 12, 44, 363, 9, 44, 1, 44, 1, 44, 1, 44,
|
||||
1, 44, 1, 44, 5, 44, 370, 8, 44, 10, 44, 12, 44, 373, 9, 44, 1, 44, 1,
|
||||
44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 383, 8, 44, 10, 44,
|
||||
12, 44, 386, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1,
|
||||
44, 1, 44, 1, 44, 5, 44, 398, 8, 44, 10, 44, 12, 44, 401, 9, 44, 1, 44,
|
||||
1, 44, 1, 44, 1, 44, 3, 44, 407, 8, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1,
|
||||
46, 3, 46, 414, 8, 46, 1, 46, 1, 46, 1, 46, 5, 46, 419, 8, 46, 10, 46,
|
||||
12, 46, 422, 9, 46, 4, 336, 350, 384, 399, 0, 47, 1, 1, 3, 2, 5, 3, 7,
|
||||
4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27,
|
||||
14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45,
|
||||
23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 0, 59, 0, 61, 0, 63, 0,
|
||||
65, 0, 67, 0, 69, 0, 71, 0, 73, 0, 75, 0, 77, 0, 79, 29, 81, 30, 83, 31,
|
||||
85, 32, 87, 33, 89, 34, 91, 35, 93, 36, 1, 0, 16, 2, 0, 65, 90, 97, 122,
|
||||
2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97,
|
||||
102, 2, 0, 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96,
|
||||
98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120,
|
||||
120, 3, 0, 9, 10, 12, 13, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117,
|
||||
4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92,
|
||||
92, 1, 0, 92, 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39,
|
||||
39, 2, 0, 66, 66, 98, 98, 456, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5,
|
||||
1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13,
|
||||
1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0,
|
||||
21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0,
|
||||
0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0,
|
||||
0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0,
|
||||
0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1,
|
||||
0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81,
|
||||
1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0,
|
||||
89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 1, 95, 1, 0, 0, 0,
|
||||
3, 98, 1, 0, 0, 0, 5, 101, 1, 0, 0, 0, 7, 104, 1, 0, 0, 0, 9, 106, 1, 0,
|
||||
0, 0, 11, 109, 1, 0, 0, 0, 13, 112, 1, 0, 0, 0, 15, 114, 1, 0, 0, 0, 17,
|
||||
117, 1, 0, 0, 0, 19, 120, 1, 0, 0, 0, 21, 122, 1, 0, 0, 0, 23, 124, 1,
|
||||
0, 0, 0, 25, 126, 1, 0, 0, 0, 27, 128, 1, 0, 0, 0, 29, 130, 1, 0, 0, 0,
|
||||
31, 132, 1, 0, 0, 0, 33, 134, 1, 0, 0, 0, 35, 136, 1, 0, 0, 0, 37, 138,
|
||||
1, 0, 0, 0, 39, 140, 1, 0, 0, 0, 41, 142, 1, 0, 0, 0, 43, 144, 1, 0, 0,
|
||||
0, 45, 146, 1, 0, 0, 0, 47, 148, 1, 0, 0, 0, 49, 150, 1, 0, 0, 0, 51, 152,
|
||||
1, 0, 0, 0, 53, 157, 1, 0, 0, 0, 55, 163, 1, 0, 0, 0, 57, 168, 1, 0, 0,
|
||||
0, 59, 170, 1, 0, 0, 0, 61, 172, 1, 0, 0, 0, 63, 174, 1, 0, 0, 0, 65, 183,
|
||||
1, 0, 0, 0, 67, 185, 1, 0, 0, 0, 69, 191, 1, 0, 0, 0, 71, 193, 1, 0, 0,
|
||||
0, 73, 196, 1, 0, 0, 0, 75, 201, 1, 0, 0, 0, 77, 224, 1, 0, 0, 0, 79, 227,
|
||||
1, 0, 0, 0, 81, 233, 1, 0, 0, 0, 83, 274, 1, 0, 0, 0, 85, 289, 1, 0, 0,
|
||||
0, 87, 308, 1, 0, 0, 0, 89, 406, 1, 0, 0, 0, 91, 408, 1, 0, 0, 0, 93, 413,
|
||||
1, 0, 0, 0, 95, 96, 5, 61, 0, 0, 96, 97, 5, 61, 0, 0, 97, 2, 1, 0, 0, 0,
|
||||
98, 99, 5, 33, 0, 0, 99, 100, 5, 61, 0, 0, 100, 4, 1, 0, 0, 0, 101, 102,
|
||||
5, 105, 0, 0, 102, 103, 5, 110, 0, 0, 103, 6, 1, 0, 0, 0, 104, 105, 5,
|
||||
60, 0, 0, 105, 8, 1, 0, 0, 0, 106, 107, 5, 60, 0, 0, 107, 108, 5, 61, 0,
|
||||
0, 108, 10, 1, 0, 0, 0, 109, 110, 5, 62, 0, 0, 110, 111, 5, 61, 0, 0, 111,
|
||||
12, 1, 0, 0, 0, 112, 113, 5, 62, 0, 0, 113, 14, 1, 0, 0, 0, 114, 115, 5,
|
||||
38, 0, 0, 115, 116, 5, 38, 0, 0, 116, 16, 1, 0, 0, 0, 117, 118, 5, 124,
|
||||
0, 0, 118, 119, 5, 124, 0, 0, 119, 18, 1, 0, 0, 0, 120, 121, 5, 91, 0,
|
||||
0, 121, 20, 1, 0, 0, 0, 122, 123, 5, 93, 0, 0, 123, 22, 1, 0, 0, 0, 124,
|
||||
125, 5, 123, 0, 0, 125, 24, 1, 0, 0, 0, 126, 127, 5, 125, 0, 0, 127, 26,
|
||||
1, 0, 0, 0, 128, 129, 5, 40, 0, 0, 129, 28, 1, 0, 0, 0, 130, 131, 5, 41,
|
||||
0, 0, 131, 30, 1, 0, 0, 0, 132, 133, 5, 46, 0, 0, 133, 32, 1, 0, 0, 0,
|
||||
134, 135, 5, 44, 0, 0, 135, 34, 1, 0, 0, 0, 136, 137, 5, 45, 0, 0, 137,
|
||||
36, 1, 0, 0, 0, 138, 139, 5, 33, 0, 0, 139, 38, 1, 0, 0, 0, 140, 141, 5,
|
||||
63, 0, 0, 141, 40, 1, 0, 0, 0, 142, 143, 5, 58, 0, 0, 143, 42, 1, 0, 0,
|
||||
0, 144, 145, 5, 43, 0, 0, 145, 44, 1, 0, 0, 0, 146, 147, 5, 42, 0, 0, 147,
|
||||
46, 1, 0, 0, 0, 148, 149, 5, 47, 0, 0, 149, 48, 1, 0, 0, 0, 150, 151, 5,
|
||||
37, 0, 0, 151, 50, 1, 0, 0, 0, 152, 153, 5, 116, 0, 0, 153, 154, 5, 114,
|
||||
0, 0, 154, 155, 5, 117, 0, 0, 155, 156, 5, 101, 0, 0, 156, 52, 1, 0, 0,
|
||||
0, 157, 158, 5, 102, 0, 0, 158, 159, 5, 97, 0, 0, 159, 160, 5, 108, 0,
|
||||
0, 160, 161, 5, 115, 0, 0, 161, 162, 5, 101, 0, 0, 162, 54, 1, 0, 0, 0,
|
||||
163, 164, 5, 110, 0, 0, 164, 165, 5, 117, 0, 0, 165, 166, 5, 108, 0, 0,
|
||||
166, 167, 5, 108, 0, 0, 167, 56, 1, 0, 0, 0, 168, 169, 5, 92, 0, 0, 169,
|
||||
58, 1, 0, 0, 0, 170, 171, 7, 0, 0, 0, 171, 60, 1, 0, 0, 0, 172, 173, 2,
|
||||
48, 57, 0, 173, 62, 1, 0, 0, 0, 174, 176, 7, 1, 0, 0, 175, 177, 7, 2, 0,
|
||||
0, 176, 175, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 179, 1, 0, 0, 0, 178,
|
||||
180, 3, 61, 30, 0, 179, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 179,
|
||||
1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 64, 1, 0, 0, 0, 183, 184, 7, 3,
|
||||
0, 0, 184, 66, 1, 0, 0, 0, 185, 186, 7, 4, 0, 0, 186, 68, 1, 0, 0, 0, 187,
|
||||
192, 3, 71, 35, 0, 188, 192, 3, 75, 37, 0, 189, 192, 3, 77, 38, 0, 190,
|
||||
192, 3, 73, 36, 0, 191, 187, 1, 0, 0, 0, 191, 188, 1, 0, 0, 0, 191, 189,
|
||||
1, 0, 0, 0, 191, 190, 1, 0, 0, 0, 192, 70, 1, 0, 0, 0, 193, 194, 3, 57,
|
||||
28, 0, 194, 195, 7, 5, 0, 0, 195, 72, 1, 0, 0, 0, 196, 197, 3, 57, 28,
|
||||
0, 197, 198, 2, 48, 51, 0, 198, 199, 2, 48, 55, 0, 199, 200, 2, 48, 55,
|
||||
0, 200, 74, 1, 0, 0, 0, 201, 202, 3, 57, 28, 0, 202, 203, 7, 6, 0, 0, 203,
|
||||
204, 3, 65, 32, 0, 204, 205, 3, 65, 32, 0, 205, 76, 1, 0, 0, 0, 206, 207,
|
||||
3, 57, 28, 0, 207, 208, 5, 117, 0, 0, 208, 209, 3, 65, 32, 0, 209, 210,
|
||||
3, 65, 32, 0, 210, 211, 3, 65, 32, 0, 211, 212, 3, 65, 32, 0, 212, 225,
|
||||
1, 0, 0, 0, 213, 214, 3, 57, 28, 0, 214, 215, 5, 85, 0, 0, 215, 216, 3,
|
||||
65, 32, 0, 216, 217, 3, 65, 32, 0, 217, 218, 3, 65, 32, 0, 218, 219, 3,
|
||||
65, 32, 0, 219, 220, 3, 65, 32, 0, 220, 221, 3, 65, 32, 0, 221, 222, 3,
|
||||
65, 32, 0, 222, 223, 3, 65, 32, 0, 223, 225, 1, 0, 0, 0, 224, 206, 1, 0,
|
||||
0, 0, 224, 213, 1, 0, 0, 0, 225, 78, 1, 0, 0, 0, 226, 228, 7, 7, 0, 0,
|
||||
227, 226, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 229,
|
||||
230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 6, 39, 0, 0, 232, 80,
|
||||
1, 0, 0, 0, 233, 234, 5, 47, 0, 0, 234, 235, 5, 47, 0, 0, 235, 239, 1,
|
||||
0, 0, 0, 236, 238, 8, 8, 0, 0, 237, 236, 1, 0, 0, 0, 238, 241, 1, 0, 0,
|
||||
0, 239, 237, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 242, 1, 0, 0, 0, 241,
|
||||
239, 1, 0, 0, 0, 242, 243, 6, 40, 0, 0, 243, 82, 1, 0, 0, 0, 244, 246,
|
||||
3, 61, 30, 0, 245, 244, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 245, 1,
|
||||
0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 251, 5, 46, 0,
|
||||
0, 250, 252, 3, 61, 30, 0, 251, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0,
|
||||
253, 251, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 256, 1, 0, 0, 0, 255,
|
||||
257, 3, 63, 31, 0, 256, 255, 1, 0, 0, 0, 256, 257, 1, 0, 0, 0, 257, 275,
|
||||
1, 0, 0, 0, 258, 260, 3, 61, 30, 0, 259, 258, 1, 0, 0, 0, 260, 261, 1,
|
||||
0, 0, 0, 261, 259, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 263, 1, 0, 0,
|
||||
0, 263, 264, 3, 63, 31, 0, 264, 275, 1, 0, 0, 0, 265, 267, 5, 46, 0, 0,
|
||||
266, 268, 3, 61, 30, 0, 267, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269,
|
||||
267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 272, 1, 0, 0, 0, 271, 273,
|
||||
3, 63, 31, 0, 272, 271, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 275, 1,
|
||||
0, 0, 0, 274, 245, 1, 0, 0, 0, 274, 259, 1, 0, 0, 0, 274, 265, 1, 0, 0,
|
||||
0, 275, 84, 1, 0, 0, 0, 276, 278, 3, 61, 30, 0, 277, 276, 1, 0, 0, 0, 278,
|
||||
279, 1, 0, 0, 0, 279, 277, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 290,
|
||||
1, 0, 0, 0, 281, 282, 5, 48, 0, 0, 282, 283, 5, 120, 0, 0, 283, 285, 1,
|
||||
0, 0, 0, 284, 286, 3, 65, 32, 0, 285, 284, 1, 0, 0, 0, 286, 287, 1, 0,
|
||||
0, 0, 287, 285, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 290, 1, 0, 0, 0,
|
||||
289, 277, 1, 0, 0, 0, 289, 281, 1, 0, 0, 0, 290, 86, 1, 0, 0, 0, 291, 293,
|
||||
3, 61, 30, 0, 292, 291, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 292, 1,
|
||||
0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 297, 7, 9, 0,
|
||||
0, 297, 309, 1, 0, 0, 0, 298, 299, 5, 48, 0, 0, 299, 300, 5, 120, 0, 0,
|
||||
300, 302, 1, 0, 0, 0, 301, 303, 3, 65, 32, 0, 302, 301, 1, 0, 0, 0, 303,
|
||||
304, 1, 0, 0, 0, 304, 302, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 306,
|
||||
1, 0, 0, 0, 306, 307, 7, 9, 0, 0, 307, 309, 1, 0, 0, 0, 308, 292, 1, 0,
|
||||
0, 0, 308, 298, 1, 0, 0, 0, 309, 88, 1, 0, 0, 0, 310, 315, 5, 34, 0, 0,
|
||||
311, 314, 3, 69, 34, 0, 312, 314, 8, 10, 0, 0, 313, 311, 1, 0, 0, 0, 313,
|
||||
312, 1, 0, 0, 0, 314, 317, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 315, 316,
|
||||
1, 0, 0, 0, 316, 318, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 318, 407, 5, 34,
|
||||
0, 0, 319, 324, 5, 39, 0, 0, 320, 323, 3, 69, 34, 0, 321, 323, 8, 11, 0,
|
||||
0, 322, 320, 1, 0, 0, 0, 322, 321, 1, 0, 0, 0, 323, 326, 1, 0, 0, 0, 324,
|
||||
322, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 327, 1, 0, 0, 0, 326, 324,
|
||||
1, 0, 0, 0, 327, 407, 5, 39, 0, 0, 328, 329, 5, 34, 0, 0, 329, 330, 5,
|
||||
34, 0, 0, 330, 331, 5, 34, 0, 0, 331, 336, 1, 0, 0, 0, 332, 335, 3, 69,
|
||||
34, 0, 333, 335, 8, 12, 0, 0, 334, 332, 1, 0, 0, 0, 334, 333, 1, 0, 0,
|
||||
0, 335, 338, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 337,
|
||||
339, 1, 0, 0, 0, 338, 336, 1, 0, 0, 0, 339, 340, 5, 34, 0, 0, 340, 341,
|
||||
5, 34, 0, 0, 341, 407, 5, 34, 0, 0, 342, 343, 5, 39, 0, 0, 343, 344, 5,
|
||||
39, 0, 0, 344, 345, 5, 39, 0, 0, 345, 350, 1, 0, 0, 0, 346, 349, 3, 69,
|
||||
34, 0, 347, 349, 8, 12, 0, 0, 348, 346, 1, 0, 0, 0, 348, 347, 1, 0, 0,
|
||||
0, 349, 352, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 351,
|
||||
353, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 353, 354, 5, 39, 0, 0, 354, 355,
|
||||
5, 39, 0, 0, 355, 407, 5, 39, 0, 0, 356, 357, 3, 67, 33, 0, 357, 361, 5,
|
||||
34, 0, 0, 358, 360, 8, 13, 0, 0, 359, 358, 1, 0, 0, 0, 360, 363, 1, 0,
|
||||
0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 364, 1, 0, 0, 0,
|
||||
363, 361, 1, 0, 0, 0, 364, 365, 5, 34, 0, 0, 365, 407, 1, 0, 0, 0, 366,
|
||||
367, 3, 67, 33, 0, 367, 371, 5, 39, 0, 0, 368, 370, 8, 14, 0, 0, 369, 368,
|
||||
1, 0, 0, 0, 370, 373, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 371, 372, 1, 0,
|
||||
0, 0, 372, 374, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 375, 5, 39, 0, 0,
|
||||
375, 407, 1, 0, 0, 0, 376, 377, 3, 67, 33, 0, 377, 378, 5, 34, 0, 0, 378,
|
||||
379, 5, 34, 0, 0, 379, 380, 5, 34, 0, 0, 380, 384, 1, 0, 0, 0, 381, 383,
|
||||
9, 0, 0, 0, 382, 381, 1, 0, 0, 0, 383, 386, 1, 0, 0, 0, 384, 385, 1, 0,
|
||||
0, 0, 384, 382, 1, 0, 0, 0, 385, 387, 1, 0, 0, 0, 386, 384, 1, 0, 0, 0,
|
||||
387, 388, 5, 34, 0, 0, 388, 389, 5, 34, 0, 0, 389, 390, 5, 34, 0, 0, 390,
|
||||
407, 1, 0, 0, 0, 391, 392, 3, 67, 33, 0, 392, 393, 5, 39, 0, 0, 393, 394,
|
||||
5, 39, 0, 0, 394, 395, 5, 39, 0, 0, 395, 399, 1, 0, 0, 0, 396, 398, 9,
|
||||
0, 0, 0, 397, 396, 1, 0, 0, 0, 398, 401, 1, 0, 0, 0, 399, 400, 1, 0, 0,
|
||||
0, 399, 397, 1, 0, 0, 0, 400, 402, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 402,
|
||||
403, 5, 39, 0, 0, 403, 404, 5, 39, 0, 0, 404, 405, 5, 39, 0, 0, 405, 407,
|
||||
1, 0, 0, 0, 406, 310, 1, 0, 0, 0, 406, 319, 1, 0, 0, 0, 406, 328, 1, 0,
|
||||
0, 0, 406, 342, 1, 0, 0, 0, 406, 356, 1, 0, 0, 0, 406, 366, 1, 0, 0, 0,
|
||||
406, 376, 1, 0, 0, 0, 406, 391, 1, 0, 0, 0, 407, 90, 1, 0, 0, 0, 408, 409,
|
||||
7, 15, 0, 0, 409, 410, 3, 89, 44, 0, 410, 92, 1, 0, 0, 0, 411, 414, 3,
|
||||
59, 29, 0, 412, 414, 5, 95, 0, 0, 413, 411, 1, 0, 0, 0, 413, 412, 1, 0,
|
||||
0, 0, 414, 420, 1, 0, 0, 0, 415, 419, 3, 59, 29, 0, 416, 419, 3, 61, 30,
|
||||
0, 417, 419, 5, 95, 0, 0, 418, 415, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 418,
|
||||
417, 1, 0, 0, 0, 419, 422, 1, 0, 0, 0, 420, 418, 1, 0, 0, 0, 420, 421,
|
||||
1, 0, 0, 0, 421, 94, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 36, 0, 176, 181,
|
||||
191, 224, 229, 239, 247, 253, 256, 261, 269, 272, 274, 279, 287, 289, 294,
|
||||
304, 308, 313, 315, 322, 324, 334, 336, 348, 350, 361, 371, 384, 399, 406,
|
||||
413, 418, 420, 1, 0, 1, 0,
|
||||
}
|
||||
deserializer := antlr.NewATNDeserializer(nil)
|
||||
staticData.atn = deserializer.Deserialize(staticData.serializedATN)
|
||||
atn := staticData.atn
|
||||
staticData.decisionToDFA = make([]*antlr.DFA, len(atn.DecisionToState))
|
||||
decisionToDFA := staticData.decisionToDFA
|
||||
for index, state := range atn.DecisionToState {
|
||||
decisionToDFA[index] = antlr.NewDFA(state, index)
|
||||
}
|
||||
staticData := &CELLexerLexerStaticData
|
||||
staticData.ChannelNames = []string{
|
||||
"DEFAULT_TOKEN_CHANNEL", "HIDDEN",
|
||||
}
|
||||
staticData.ModeNames = []string{
|
||||
"DEFAULT_MODE",
|
||||
}
|
||||
staticData.LiteralNames = []string{
|
||||
"", "'=='", "'!='", "'in'", "'<'", "'<='", "'>='", "'>'", "'&&'", "'||'",
|
||||
"'['", "']'", "'{'", "'}'", "'('", "')'", "'.'", "','", "'-'", "'!'",
|
||||
"'?'", "':'", "'+'", "'*'", "'/'", "'%'", "'true'", "'false'", "'null'",
|
||||
}
|
||||
staticData.SymbolicNames = []string{
|
||||
"", "EQUALS", "NOT_EQUALS", "IN", "LESS", "LESS_EQUALS", "GREATER_EQUALS",
|
||||
"GREATER", "LOGICAL_AND", "LOGICAL_OR", "LBRACKET", "RPRACKET", "LBRACE",
|
||||
"RBRACE", "LPAREN", "RPAREN", "DOT", "COMMA", "MINUS", "EXCLAM", "QUESTIONMARK",
|
||||
"COLON", "PLUS", "STAR", "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE",
|
||||
"NUL", "WHITESPACE", "COMMENT", "NUM_FLOAT", "NUM_INT", "NUM_UINT",
|
||||
"STRING", "BYTES", "IDENTIFIER",
|
||||
}
|
||||
staticData.RuleNames = []string{
|
||||
"EQUALS", "NOT_EQUALS", "IN", "LESS", "LESS_EQUALS", "GREATER_EQUALS",
|
||||
"GREATER", "LOGICAL_AND", "LOGICAL_OR", "LBRACKET", "RPRACKET", "LBRACE",
|
||||
"RBRACE", "LPAREN", "RPAREN", "DOT", "COMMA", "MINUS", "EXCLAM", "QUESTIONMARK",
|
||||
"COLON", "PLUS", "STAR", "SLASH", "PERCENT", "CEL_TRUE", "CEL_FALSE",
|
||||
"NUL", "BACKSLASH", "LETTER", "DIGIT", "EXPONENT", "HEXDIGIT", "RAW",
|
||||
"ESC_SEQ", "ESC_CHAR_SEQ", "ESC_OCT_SEQ", "ESC_BYTE_SEQ", "ESC_UNI_SEQ",
|
||||
"WHITESPACE", "COMMENT", "NUM_FLOAT", "NUM_INT", "NUM_UINT", "STRING",
|
||||
"BYTES", "IDENTIFIER",
|
||||
}
|
||||
staticData.PredictionContextCache = antlr.NewPredictionContextCache()
|
||||
staticData.serializedATN = []int32{
|
||||
4, 0, 36, 423, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2,
|
||||
4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2,
|
||||
10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15,
|
||||
7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7,
|
||||
20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25,
|
||||
2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2,
|
||||
31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36,
|
||||
7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7,
|
||||
41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46,
|
||||
1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4,
|
||||
1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8,
|
||||
1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13,
|
||||
1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 17, 1, 17, 1, 18, 1, 18, 1,
|
||||
19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24,
|
||||
1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1,
|
||||
26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29,
|
||||
1, 30, 1, 30, 1, 31, 1, 31, 3, 31, 177, 8, 31, 1, 31, 4, 31, 180, 8, 31,
|
||||
11, 31, 12, 31, 181, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1,
|
||||
34, 3, 34, 192, 8, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36,
|
||||
1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1,
|
||||
38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38,
|
||||
1, 38, 1, 38, 1, 38, 3, 38, 225, 8, 38, 1, 39, 4, 39, 228, 8, 39, 11, 39,
|
||||
12, 39, 229, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 238, 8, 40,
|
||||
10, 40, 12, 40, 241, 9, 40, 1, 40, 1, 40, 1, 41, 4, 41, 246, 8, 41, 11,
|
||||
41, 12, 41, 247, 1, 41, 1, 41, 4, 41, 252, 8, 41, 11, 41, 12, 41, 253,
|
||||
1, 41, 3, 41, 257, 8, 41, 1, 41, 4, 41, 260, 8, 41, 11, 41, 12, 41, 261,
|
||||
1, 41, 1, 41, 1, 41, 1, 41, 4, 41, 268, 8, 41, 11, 41, 12, 41, 269, 1,
|
||||
41, 3, 41, 273, 8, 41, 3, 41, 275, 8, 41, 1, 42, 4, 42, 278, 8, 42, 11,
|
||||
42, 12, 42, 279, 1, 42, 1, 42, 1, 42, 1, 42, 4, 42, 286, 8, 42, 11, 42,
|
||||
12, 42, 287, 3, 42, 290, 8, 42, 1, 43, 4, 43, 293, 8, 43, 11, 43, 12, 43,
|
||||
294, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 4, 43, 303, 8, 43, 11, 43,
|
||||
12, 43, 304, 1, 43, 1, 43, 3, 43, 309, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44,
|
||||
314, 8, 44, 10, 44, 12, 44, 317, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5,
|
||||
44, 323, 8, 44, 10, 44, 12, 44, 326, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44,
|
||||
1, 44, 1, 44, 1, 44, 5, 44, 335, 8, 44, 10, 44, 12, 44, 338, 9, 44, 1,
|
||||
44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 349,
|
||||
8, 44, 10, 44, 12, 44, 352, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1,
|
||||
44, 5, 44, 360, 8, 44, 10, 44, 12, 44, 363, 9, 44, 1, 44, 1, 44, 1, 44,
|
||||
1, 44, 1, 44, 5, 44, 370, 8, 44, 10, 44, 12, 44, 373, 9, 44, 1, 44, 1,
|
||||
44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 5, 44, 383, 8, 44, 10, 44,
|
||||
12, 44, 386, 9, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1,
|
||||
44, 1, 44, 1, 44, 5, 44, 398, 8, 44, 10, 44, 12, 44, 401, 9, 44, 1, 44,
|
||||
1, 44, 1, 44, 1, 44, 3, 44, 407, 8, 44, 1, 45, 1, 45, 1, 45, 1, 46, 1,
|
||||
46, 3, 46, 414, 8, 46, 1, 46, 1, 46, 1, 46, 5, 46, 419, 8, 46, 10, 46,
|
||||
12, 46, 422, 9, 46, 4, 336, 350, 384, 399, 0, 47, 1, 1, 3, 2, 5, 3, 7,
|
||||
4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27,
|
||||
14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45,
|
||||
23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 0, 59, 0, 61, 0, 63, 0,
|
||||
65, 0, 67, 0, 69, 0, 71, 0, 73, 0, 75, 0, 77, 0, 79, 29, 81, 30, 83, 31,
|
||||
85, 32, 87, 33, 89, 34, 91, 35, 93, 36, 1, 0, 16, 2, 0, 65, 90, 97, 122,
|
||||
2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 48, 57, 65, 70, 97,
|
||||
102, 2, 0, 82, 82, 114, 114, 10, 0, 34, 34, 39, 39, 63, 63, 92, 92, 96,
|
||||
98, 102, 102, 110, 110, 114, 114, 116, 116, 118, 118, 2, 0, 88, 88, 120,
|
||||
120, 3, 0, 9, 10, 12, 13, 32, 32, 1, 0, 10, 10, 2, 0, 85, 85, 117, 117,
|
||||
4, 0, 10, 10, 13, 13, 34, 34, 92, 92, 4, 0, 10, 10, 13, 13, 39, 39, 92,
|
||||
92, 1, 0, 92, 92, 3, 0, 10, 10, 13, 13, 34, 34, 3, 0, 10, 10, 13, 13, 39,
|
||||
39, 2, 0, 66, 66, 98, 98, 456, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5,
|
||||
1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13,
|
||||
1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0,
|
||||
21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0,
|
||||
0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0,
|
||||
0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0,
|
||||
0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1,
|
||||
0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81,
|
||||
1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0,
|
||||
89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 1, 95, 1, 0, 0, 0,
|
||||
3, 98, 1, 0, 0, 0, 5, 101, 1, 0, 0, 0, 7, 104, 1, 0, 0, 0, 9, 106, 1, 0,
|
||||
0, 0, 11, 109, 1, 0, 0, 0, 13, 112, 1, 0, 0, 0, 15, 114, 1, 0, 0, 0, 17,
|
||||
117, 1, 0, 0, 0, 19, 120, 1, 0, 0, 0, 21, 122, 1, 0, 0, 0, 23, 124, 1,
|
||||
0, 0, 0, 25, 126, 1, 0, 0, 0, 27, 128, 1, 0, 0, 0, 29, 130, 1, 0, 0, 0,
|
||||
31, 132, 1, 0, 0, 0, 33, 134, 1, 0, 0, 0, 35, 136, 1, 0, 0, 0, 37, 138,
|
||||
1, 0, 0, 0, 39, 140, 1, 0, 0, 0, 41, 142, 1, 0, 0, 0, 43, 144, 1, 0, 0,
|
||||
0, 45, 146, 1, 0, 0, 0, 47, 148, 1, 0, 0, 0, 49, 150, 1, 0, 0, 0, 51, 152,
|
||||
1, 0, 0, 0, 53, 157, 1, 0, 0, 0, 55, 163, 1, 0, 0, 0, 57, 168, 1, 0, 0,
|
||||
0, 59, 170, 1, 0, 0, 0, 61, 172, 1, 0, 0, 0, 63, 174, 1, 0, 0, 0, 65, 183,
|
||||
1, 0, 0, 0, 67, 185, 1, 0, 0, 0, 69, 191, 1, 0, 0, 0, 71, 193, 1, 0, 0,
|
||||
0, 73, 196, 1, 0, 0, 0, 75, 201, 1, 0, 0, 0, 77, 224, 1, 0, 0, 0, 79, 227,
|
||||
1, 0, 0, 0, 81, 233, 1, 0, 0, 0, 83, 274, 1, 0, 0, 0, 85, 289, 1, 0, 0,
|
||||
0, 87, 308, 1, 0, 0, 0, 89, 406, 1, 0, 0, 0, 91, 408, 1, 0, 0, 0, 93, 413,
|
||||
1, 0, 0, 0, 95, 96, 5, 61, 0, 0, 96, 97, 5, 61, 0, 0, 97, 2, 1, 0, 0, 0,
|
||||
98, 99, 5, 33, 0, 0, 99, 100, 5, 61, 0, 0, 100, 4, 1, 0, 0, 0, 101, 102,
|
||||
5, 105, 0, 0, 102, 103, 5, 110, 0, 0, 103, 6, 1, 0, 0, 0, 104, 105, 5,
|
||||
60, 0, 0, 105, 8, 1, 0, 0, 0, 106, 107, 5, 60, 0, 0, 107, 108, 5, 61, 0,
|
||||
0, 108, 10, 1, 0, 0, 0, 109, 110, 5, 62, 0, 0, 110, 111, 5, 61, 0, 0, 111,
|
||||
12, 1, 0, 0, 0, 112, 113, 5, 62, 0, 0, 113, 14, 1, 0, 0, 0, 114, 115, 5,
|
||||
38, 0, 0, 115, 116, 5, 38, 0, 0, 116, 16, 1, 0, 0, 0, 117, 118, 5, 124,
|
||||
0, 0, 118, 119, 5, 124, 0, 0, 119, 18, 1, 0, 0, 0, 120, 121, 5, 91, 0,
|
||||
0, 121, 20, 1, 0, 0, 0, 122, 123, 5, 93, 0, 0, 123, 22, 1, 0, 0, 0, 124,
|
||||
125, 5, 123, 0, 0, 125, 24, 1, 0, 0, 0, 126, 127, 5, 125, 0, 0, 127, 26,
|
||||
1, 0, 0, 0, 128, 129, 5, 40, 0, 0, 129, 28, 1, 0, 0, 0, 130, 131, 5, 41,
|
||||
0, 0, 131, 30, 1, 0, 0, 0, 132, 133, 5, 46, 0, 0, 133, 32, 1, 0, 0, 0,
|
||||
134, 135, 5, 44, 0, 0, 135, 34, 1, 0, 0, 0, 136, 137, 5, 45, 0, 0, 137,
|
||||
36, 1, 0, 0, 0, 138, 139, 5, 33, 0, 0, 139, 38, 1, 0, 0, 0, 140, 141, 5,
|
||||
63, 0, 0, 141, 40, 1, 0, 0, 0, 142, 143, 5, 58, 0, 0, 143, 42, 1, 0, 0,
|
||||
0, 144, 145, 5, 43, 0, 0, 145, 44, 1, 0, 0, 0, 146, 147, 5, 42, 0, 0, 147,
|
||||
46, 1, 0, 0, 0, 148, 149, 5, 47, 0, 0, 149, 48, 1, 0, 0, 0, 150, 151, 5,
|
||||
37, 0, 0, 151, 50, 1, 0, 0, 0, 152, 153, 5, 116, 0, 0, 153, 154, 5, 114,
|
||||
0, 0, 154, 155, 5, 117, 0, 0, 155, 156, 5, 101, 0, 0, 156, 52, 1, 0, 0,
|
||||
0, 157, 158, 5, 102, 0, 0, 158, 159, 5, 97, 0, 0, 159, 160, 5, 108, 0,
|
||||
0, 160, 161, 5, 115, 0, 0, 161, 162, 5, 101, 0, 0, 162, 54, 1, 0, 0, 0,
|
||||
163, 164, 5, 110, 0, 0, 164, 165, 5, 117, 0, 0, 165, 166, 5, 108, 0, 0,
|
||||
166, 167, 5, 108, 0, 0, 167, 56, 1, 0, 0, 0, 168, 169, 5, 92, 0, 0, 169,
|
||||
58, 1, 0, 0, 0, 170, 171, 7, 0, 0, 0, 171, 60, 1, 0, 0, 0, 172, 173, 2,
|
||||
48, 57, 0, 173, 62, 1, 0, 0, 0, 174, 176, 7, 1, 0, 0, 175, 177, 7, 2, 0,
|
||||
0, 176, 175, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 179, 1, 0, 0, 0, 178,
|
||||
180, 3, 61, 30, 0, 179, 178, 1, 0, 0, 0, 180, 181, 1, 0, 0, 0, 181, 179,
|
||||
1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 64, 1, 0, 0, 0, 183, 184, 7, 3,
|
||||
0, 0, 184, 66, 1, 0, 0, 0, 185, 186, 7, 4, 0, 0, 186, 68, 1, 0, 0, 0, 187,
|
||||
192, 3, 71, 35, 0, 188, 192, 3, 75, 37, 0, 189, 192, 3, 77, 38, 0, 190,
|
||||
192, 3, 73, 36, 0, 191, 187, 1, 0, 0, 0, 191, 188, 1, 0, 0, 0, 191, 189,
|
||||
1, 0, 0, 0, 191, 190, 1, 0, 0, 0, 192, 70, 1, 0, 0, 0, 193, 194, 3, 57,
|
||||
28, 0, 194, 195, 7, 5, 0, 0, 195, 72, 1, 0, 0, 0, 196, 197, 3, 57, 28,
|
||||
0, 197, 198, 2, 48, 51, 0, 198, 199, 2, 48, 55, 0, 199, 200, 2, 48, 55,
|
||||
0, 200, 74, 1, 0, 0, 0, 201, 202, 3, 57, 28, 0, 202, 203, 7, 6, 0, 0, 203,
|
||||
204, 3, 65, 32, 0, 204, 205, 3, 65, 32, 0, 205, 76, 1, 0, 0, 0, 206, 207,
|
||||
3, 57, 28, 0, 207, 208, 5, 117, 0, 0, 208, 209, 3, 65, 32, 0, 209, 210,
|
||||
3, 65, 32, 0, 210, 211, 3, 65, 32, 0, 211, 212, 3, 65, 32, 0, 212, 225,
|
||||
1, 0, 0, 0, 213, 214, 3, 57, 28, 0, 214, 215, 5, 85, 0, 0, 215, 216, 3,
|
||||
65, 32, 0, 216, 217, 3, 65, 32, 0, 217, 218, 3, 65, 32, 0, 218, 219, 3,
|
||||
65, 32, 0, 219, 220, 3, 65, 32, 0, 220, 221, 3, 65, 32, 0, 221, 222, 3,
|
||||
65, 32, 0, 222, 223, 3, 65, 32, 0, 223, 225, 1, 0, 0, 0, 224, 206, 1, 0,
|
||||
0, 0, 224, 213, 1, 0, 0, 0, 225, 78, 1, 0, 0, 0, 226, 228, 7, 7, 0, 0,
|
||||
227, 226, 1, 0, 0, 0, 228, 229, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 229,
|
||||
230, 1, 0, 0, 0, 230, 231, 1, 0, 0, 0, 231, 232, 6, 39, 0, 0, 232, 80,
|
||||
1, 0, 0, 0, 233, 234, 5, 47, 0, 0, 234, 235, 5, 47, 0, 0, 235, 239, 1,
|
||||
0, 0, 0, 236, 238, 8, 8, 0, 0, 237, 236, 1, 0, 0, 0, 238, 241, 1, 0, 0,
|
||||
0, 239, 237, 1, 0, 0, 0, 239, 240, 1, 0, 0, 0, 240, 242, 1, 0, 0, 0, 241,
|
||||
239, 1, 0, 0, 0, 242, 243, 6, 40, 0, 0, 243, 82, 1, 0, 0, 0, 244, 246,
|
||||
3, 61, 30, 0, 245, 244, 1, 0, 0, 0, 246, 247, 1, 0, 0, 0, 247, 245, 1,
|
||||
0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 249, 1, 0, 0, 0, 249, 251, 5, 46, 0,
|
||||
0, 250, 252, 3, 61, 30, 0, 251, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0,
|
||||
253, 251, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 256, 1, 0, 0, 0, 255,
|
||||
257, 3, 63, 31, 0, 256, 255, 1, 0, 0, 0, 256, 257, 1, 0, 0, 0, 257, 275,
|
||||
1, 0, 0, 0, 258, 260, 3, 61, 30, 0, 259, 258, 1, 0, 0, 0, 260, 261, 1,
|
||||
0, 0, 0, 261, 259, 1, 0, 0, 0, 261, 262, 1, 0, 0, 0, 262, 263, 1, 0, 0,
|
||||
0, 263, 264, 3, 63, 31, 0, 264, 275, 1, 0, 0, 0, 265, 267, 5, 46, 0, 0,
|
||||
266, 268, 3, 61, 30, 0, 267, 266, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269,
|
||||
267, 1, 0, 0, 0, 269, 270, 1, 0, 0, 0, 270, 272, 1, 0, 0, 0, 271, 273,
|
||||
3, 63, 31, 0, 272, 271, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 275, 1,
|
||||
0, 0, 0, 274, 245, 1, 0, 0, 0, 274, 259, 1, 0, 0, 0, 274, 265, 1, 0, 0,
|
||||
0, 275, 84, 1, 0, 0, 0, 276, 278, 3, 61, 30, 0, 277, 276, 1, 0, 0, 0, 278,
|
||||
279, 1, 0, 0, 0, 279, 277, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 290,
|
||||
1, 0, 0, 0, 281, 282, 5, 48, 0, 0, 282, 283, 5, 120, 0, 0, 283, 285, 1,
|
||||
0, 0, 0, 284, 286, 3, 65, 32, 0, 285, 284, 1, 0, 0, 0, 286, 287, 1, 0,
|
||||
0, 0, 287, 285, 1, 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 290, 1, 0, 0, 0,
|
||||
289, 277, 1, 0, 0, 0, 289, 281, 1, 0, 0, 0, 290, 86, 1, 0, 0, 0, 291, 293,
|
||||
3, 61, 30, 0, 292, 291, 1, 0, 0, 0, 293, 294, 1, 0, 0, 0, 294, 292, 1,
|
||||
0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 297, 7, 9, 0,
|
||||
0, 297, 309, 1, 0, 0, 0, 298, 299, 5, 48, 0, 0, 299, 300, 5, 120, 0, 0,
|
||||
300, 302, 1, 0, 0, 0, 301, 303, 3, 65, 32, 0, 302, 301, 1, 0, 0, 0, 303,
|
||||
304, 1, 0, 0, 0, 304, 302, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 306,
|
||||
1, 0, 0, 0, 306, 307, 7, 9, 0, 0, 307, 309, 1, 0, 0, 0, 308, 292, 1, 0,
|
||||
0, 0, 308, 298, 1, 0, 0, 0, 309, 88, 1, 0, 0, 0, 310, 315, 5, 34, 0, 0,
|
||||
311, 314, 3, 69, 34, 0, 312, 314, 8, 10, 0, 0, 313, 311, 1, 0, 0, 0, 313,
|
||||
312, 1, 0, 0, 0, 314, 317, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 315, 316,
|
||||
1, 0, 0, 0, 316, 318, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 318, 407, 5, 34,
|
||||
0, 0, 319, 324, 5, 39, 0, 0, 320, 323, 3, 69, 34, 0, 321, 323, 8, 11, 0,
|
||||
0, 322, 320, 1, 0, 0, 0, 322, 321, 1, 0, 0, 0, 323, 326, 1, 0, 0, 0, 324,
|
||||
322, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 327, 1, 0, 0, 0, 326, 324,
|
||||
1, 0, 0, 0, 327, 407, 5, 39, 0, 0, 328, 329, 5, 34, 0, 0, 329, 330, 5,
|
||||
34, 0, 0, 330, 331, 5, 34, 0, 0, 331, 336, 1, 0, 0, 0, 332, 335, 3, 69,
|
||||
34, 0, 333, 335, 8, 12, 0, 0, 334, 332, 1, 0, 0, 0, 334, 333, 1, 0, 0,
|
||||
0, 335, 338, 1, 0, 0, 0, 336, 337, 1, 0, 0, 0, 336, 334, 1, 0, 0, 0, 337,
|
||||
339, 1, 0, 0, 0, 338, 336, 1, 0, 0, 0, 339, 340, 5, 34, 0, 0, 340, 341,
|
||||
5, 34, 0, 0, 341, 407, 5, 34, 0, 0, 342, 343, 5, 39, 0, 0, 343, 344, 5,
|
||||
39, 0, 0, 344, 345, 5, 39, 0, 0, 345, 350, 1, 0, 0, 0, 346, 349, 3, 69,
|
||||
34, 0, 347, 349, 8, 12, 0, 0, 348, 346, 1, 0, 0, 0, 348, 347, 1, 0, 0,
|
||||
0, 349, 352, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 351,
|
||||
353, 1, 0, 0, 0, 352, 350, 1, 0, 0, 0, 353, 354, 5, 39, 0, 0, 354, 355,
|
||||
5, 39, 0, 0, 355, 407, 5, 39, 0, 0, 356, 357, 3, 67, 33, 0, 357, 361, 5,
|
||||
34, 0, 0, 358, 360, 8, 13, 0, 0, 359, 358, 1, 0, 0, 0, 360, 363, 1, 0,
|
||||
0, 0, 361, 359, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 364, 1, 0, 0, 0,
|
||||
363, 361, 1, 0, 0, 0, 364, 365, 5, 34, 0, 0, 365, 407, 1, 0, 0, 0, 366,
|
||||
367, 3, 67, 33, 0, 367, 371, 5, 39, 0, 0, 368, 370, 8, 14, 0, 0, 369, 368,
|
||||
1, 0, 0, 0, 370, 373, 1, 0, 0, 0, 371, 369, 1, 0, 0, 0, 371, 372, 1, 0,
|
||||
0, 0, 372, 374, 1, 0, 0, 0, 373, 371, 1, 0, 0, 0, 374, 375, 5, 39, 0, 0,
|
||||
375, 407, 1, 0, 0, 0, 376, 377, 3, 67, 33, 0, 377, 378, 5, 34, 0, 0, 378,
|
||||
379, 5, 34, 0, 0, 379, 380, 5, 34, 0, 0, 380, 384, 1, 0, 0, 0, 381, 383,
|
||||
9, 0, 0, 0, 382, 381, 1, 0, 0, 0, 383, 386, 1, 0, 0, 0, 384, 385, 1, 0,
|
||||
0, 0, 384, 382, 1, 0, 0, 0, 385, 387, 1, 0, 0, 0, 386, 384, 1, 0, 0, 0,
|
||||
387, 388, 5, 34, 0, 0, 388, 389, 5, 34, 0, 0, 389, 390, 5, 34, 0, 0, 390,
|
||||
407, 1, 0, 0, 0, 391, 392, 3, 67, 33, 0, 392, 393, 5, 39, 0, 0, 393, 394,
|
||||
5, 39, 0, 0, 394, 395, 5, 39, 0, 0, 395, 399, 1, 0, 0, 0, 396, 398, 9,
|
||||
0, 0, 0, 397, 396, 1, 0, 0, 0, 398, 401, 1, 0, 0, 0, 399, 400, 1, 0, 0,
|
||||
0, 399, 397, 1, 0, 0, 0, 400, 402, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 402,
|
||||
403, 5, 39, 0, 0, 403, 404, 5, 39, 0, 0, 404, 405, 5, 39, 0, 0, 405, 407,
|
||||
1, 0, 0, 0, 406, 310, 1, 0, 0, 0, 406, 319, 1, 0, 0, 0, 406, 328, 1, 0,
|
||||
0, 0, 406, 342, 1, 0, 0, 0, 406, 356, 1, 0, 0, 0, 406, 366, 1, 0, 0, 0,
|
||||
406, 376, 1, 0, 0, 0, 406, 391, 1, 0, 0, 0, 407, 90, 1, 0, 0, 0, 408, 409,
|
||||
7, 15, 0, 0, 409, 410, 3, 89, 44, 0, 410, 92, 1, 0, 0, 0, 411, 414, 3,
|
||||
59, 29, 0, 412, 414, 5, 95, 0, 0, 413, 411, 1, 0, 0, 0, 413, 412, 1, 0,
|
||||
0, 0, 414, 420, 1, 0, 0, 0, 415, 419, 3, 59, 29, 0, 416, 419, 3, 61, 30,
|
||||
0, 417, 419, 5, 95, 0, 0, 418, 415, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 418,
|
||||
417, 1, 0, 0, 0, 419, 422, 1, 0, 0, 0, 420, 418, 1, 0, 0, 0, 420, 421,
|
||||
1, 0, 0, 0, 421, 94, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 36, 0, 176, 181,
|
||||
191, 224, 229, 239, 247, 253, 256, 261, 269, 272, 274, 279, 287, 289, 294,
|
||||
304, 308, 313, 315, 322, 324, 334, 336, 348, 350, 361, 371, 384, 399, 406,
|
||||
413, 418, 420, 1, 0, 1, 0,
|
||||
}
|
||||
deserializer := antlr.NewATNDeserializer(nil)
|
||||
staticData.atn = deserializer.Deserialize(staticData.serializedATN)
|
||||
atn := staticData.atn
|
||||
staticData.decisionToDFA = make([]*antlr.DFA, len(atn.DecisionToState))
|
||||
decisionToDFA := staticData.decisionToDFA
|
||||
for index, state := range atn.DecisionToState {
|
||||
decisionToDFA[index] = antlr.NewDFA(state, index)
|
||||
}
|
||||
}
|
||||
|
||||
// CELLexerInit initializes any static state used to implement CELLexer. By default the
|
||||
@ -282,22 +280,22 @@ func cellexerLexerInit() {
|
||||
// NewCELLexer(). You can call this function if you wish to initialize the static state ahead
|
||||
// of time.
|
||||
func CELLexerInit() {
|
||||
staticData := &cellexerLexerStaticData
|
||||
staticData.once.Do(cellexerLexerInit)
|
||||
staticData := &CELLexerLexerStaticData
|
||||
staticData.once.Do(cellexerLexerInit)
|
||||
}
|
||||
|
||||
// NewCELLexer produces a new lexer instance for the optional input antlr.CharStream.
|
||||
func NewCELLexer(input antlr.CharStream) *CELLexer {
|
||||
CELLexerInit()
|
||||
CELLexerInit()
|
||||
l := new(CELLexer)
|
||||
l.BaseLexer = antlr.NewBaseLexer(input)
|
||||
staticData := &cellexerLexerStaticData
|
||||
l.Interpreter = antlr.NewLexerATNSimulator(l, staticData.atn, staticData.decisionToDFA, staticData.predictionContextCache)
|
||||
l.channelNames = staticData.channelNames
|
||||
l.modeNames = staticData.modeNames
|
||||
l.RuleNames = staticData.ruleNames
|
||||
l.LiteralNames = staticData.literalNames
|
||||
l.SymbolicNames = staticData.symbolicNames
|
||||
staticData := &CELLexerLexerStaticData
|
||||
l.Interpreter = antlr.NewLexerATNSimulator(l, staticData.atn, staticData.decisionToDFA, staticData.PredictionContextCache)
|
||||
l.channelNames = staticData.ChannelNames
|
||||
l.modeNames = staticData.ModeNames
|
||||
l.RuleNames = staticData.RuleNames
|
||||
l.LiteralNames = staticData.LiteralNames
|
||||
l.SymbolicNames = staticData.SymbolicNames
|
||||
l.GrammarFileName = "CEL.g4"
|
||||
// TODO: l.EOF = antlr.TokenEOF
|
||||
|
||||
@ -306,40 +304,41 @@ func NewCELLexer(input antlr.CharStream) *CELLexer {
|
||||
|
||||
// CELLexer tokens.
|
||||
const (
|
||||
CELLexerEQUALS = 1
|
||||
CELLexerNOT_EQUALS = 2
|
||||
CELLexerIN = 3
|
||||
CELLexerLESS = 4
|
||||
CELLexerLESS_EQUALS = 5
|
||||
CELLexerEQUALS = 1
|
||||
CELLexerNOT_EQUALS = 2
|
||||
CELLexerIN = 3
|
||||
CELLexerLESS = 4
|
||||
CELLexerLESS_EQUALS = 5
|
||||
CELLexerGREATER_EQUALS = 6
|
||||
CELLexerGREATER = 7
|
||||
CELLexerLOGICAL_AND = 8
|
||||
CELLexerLOGICAL_OR = 9
|
||||
CELLexerLBRACKET = 10
|
||||
CELLexerRPRACKET = 11
|
||||
CELLexerLBRACE = 12
|
||||
CELLexerRBRACE = 13
|
||||
CELLexerLPAREN = 14
|
||||
CELLexerRPAREN = 15
|
||||
CELLexerDOT = 16
|
||||
CELLexerCOMMA = 17
|
||||
CELLexerMINUS = 18
|
||||
CELLexerEXCLAM = 19
|
||||
CELLexerQUESTIONMARK = 20
|
||||
CELLexerCOLON = 21
|
||||
CELLexerPLUS = 22
|
||||
CELLexerSTAR = 23
|
||||
CELLexerSLASH = 24
|
||||
CELLexerPERCENT = 25
|
||||
CELLexerCEL_TRUE = 26
|
||||
CELLexerCEL_FALSE = 27
|
||||
CELLexerNUL = 28
|
||||
CELLexerWHITESPACE = 29
|
||||
CELLexerCOMMENT = 30
|
||||
CELLexerNUM_FLOAT = 31
|
||||
CELLexerNUM_INT = 32
|
||||
CELLexerNUM_UINT = 33
|
||||
CELLexerSTRING = 34
|
||||
CELLexerBYTES = 35
|
||||
CELLexerIDENTIFIER = 36
|
||||
CELLexerGREATER = 7
|
||||
CELLexerLOGICAL_AND = 8
|
||||
CELLexerLOGICAL_OR = 9
|
||||
CELLexerLBRACKET = 10
|
||||
CELLexerRPRACKET = 11
|
||||
CELLexerLBRACE = 12
|
||||
CELLexerRBRACE = 13
|
||||
CELLexerLPAREN = 14
|
||||
CELLexerRPAREN = 15
|
||||
CELLexerDOT = 16
|
||||
CELLexerCOMMA = 17
|
||||
CELLexerMINUS = 18
|
||||
CELLexerEXCLAM = 19
|
||||
CELLexerQUESTIONMARK = 20
|
||||
CELLexerCOLON = 21
|
||||
CELLexerPLUS = 22
|
||||
CELLexerSTAR = 23
|
||||
CELLexerSLASH = 24
|
||||
CELLexerPERCENT = 25
|
||||
CELLexerCEL_TRUE = 26
|
||||
CELLexerCEL_FALSE = 27
|
||||
CELLexerNUL = 28
|
||||
CELLexerWHITESPACE = 29
|
||||
CELLexerCOMMENT = 30
|
||||
CELLexerNUM_FLOAT = 31
|
||||
CELLexerNUM_INT = 32
|
||||
CELLexerNUM_UINT = 33
|
||||
CELLexerSTRING = 34
|
||||
CELLexerBYTES = 35
|
||||
CELLexerIDENTIFIER = 36
|
||||
)
|
||||
|
||||
|
5
vendor/github.com/google/cel-go/parser/gen/cel_listener.go
generated
vendored
5
vendor/github.com/google/cel-go/parser/gen/cel_listener.go
generated
vendored
@ -1,7 +1,8 @@
|
||||
// Code generated from /Users/tswadell/go/src/github.com/google/cel-go/parser/gen/CEL.g4 by ANTLR 4.12.0. DO NOT EDIT.
|
||||
// Code generated from /usr/local/google/home/tswadell/go/src/github.com/google/cel-go/parser/gen/CEL.g4 by ANTLR 4.13.1. DO NOT EDIT.
|
||||
|
||||
package gen // CEL
|
||||
import "github.com/antlr/antlr4/runtime/Go/antlr/v4"
|
||||
import "github.com/antlr4-go/antlr/v4"
|
||||
|
||||
|
||||
// CELListener is a complete listener for a parse tree produced by CELParser.
|
||||
type CELListener interface {
|
||||
|
2478
vendor/github.com/google/cel-go/parser/gen/cel_parser.go
generated
vendored
2478
vendor/github.com/google/cel-go/parser/gen/cel_parser.go
generated
vendored
File diff suppressed because it is too large
Load Diff
8
vendor/github.com/google/cel-go/parser/gen/cel_visitor.go
generated
vendored
8
vendor/github.com/google/cel-go/parser/gen/cel_visitor.go
generated
vendored
@ -1,7 +1,8 @@
|
||||
// Code generated from /Users/tswadell/go/src/github.com/google/cel-go/parser/gen/CEL.g4 by ANTLR 4.12.0. DO NOT EDIT.
|
||||
// Code generated from /usr/local/google/home/tswadell/go/src/github.com/google/cel-go/parser/gen/CEL.g4 by ANTLR 4.13.1. DO NOT EDIT.
|
||||
|
||||
package gen // CEL
|
||||
import "github.com/antlr/antlr4/runtime/Go/antlr/v4"
|
||||
import "github.com/antlr4-go/antlr/v4"
|
||||
|
||||
|
||||
// A complete Visitor for a parse tree produced by CELParser.
|
||||
type CELVisitor interface {
|
||||
@ -105,4 +106,5 @@ type CELVisitor interface {
|
||||
|
||||
// Visit a parse tree produced by CELParser#Null.
|
||||
VisitNull(ctx *NullContext) interface{}
|
||||
}
|
||||
|
||||
}
|
2
vendor/github.com/google/cel-go/parser/gen/generate.sh
generated
vendored
2
vendor/github.com/google/cel-go/parser/gen/generate.sh
generated
vendored
@ -27,7 +27,7 @@
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
# Generate AntLR artifacts.
|
||||
java -Xmx500M -cp ${DIR}/antlr-4.12.0-complete.jar org.antlr.v4.Tool \
|
||||
java -Xmx500M -cp ${DIR}/antlr-4.13.1-complete.jar org.antlr.v4.Tool \
|
||||
-Dlanguage=Go \
|
||||
-package gen \
|
||||
-o ${DIR} \
|
||||
|
576
vendor/github.com/google/cel-go/parser/helper.go
generated
vendored
576
vendor/github.com/google/cel-go/parser/helper.go
generated
vendored
@ -17,284 +17,209 @@ package parser
|
||||
import (
|
||||
"sync"
|
||||
|
||||
antlr "github.com/antlr/antlr4/runtime/Go/antlr/v4"
|
||||
antlr "github.com/antlr4-go/antlr/v4"
|
||||
|
||||
"github.com/google/cel-go/common"
|
||||
|
||||
exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
|
||||
"github.com/google/cel-go/common/ast"
|
||||
"github.com/google/cel-go/common/types"
|
||||
"github.com/google/cel-go/common/types/ref"
|
||||
)
|
||||
|
||||
type parserHelper struct {
|
||||
source common.Source
|
||||
nextID int64
|
||||
positions map[int64]int32
|
||||
macroCalls map[int64]*exprpb.Expr
|
||||
exprFactory ast.ExprFactory
|
||||
source common.Source
|
||||
sourceInfo *ast.SourceInfo
|
||||
nextID int64
|
||||
}
|
||||
|
||||
func newParserHelper(source common.Source) *parserHelper {
|
||||
func newParserHelper(source common.Source, fac ast.ExprFactory) *parserHelper {
|
||||
return &parserHelper{
|
||||
source: source,
|
||||
nextID: 1,
|
||||
positions: make(map[int64]int32),
|
||||
macroCalls: make(map[int64]*exprpb.Expr),
|
||||
exprFactory: fac,
|
||||
source: source,
|
||||
sourceInfo: ast.NewSourceInfo(source),
|
||||
nextID: 1,
|
||||
}
|
||||
}
|
||||
|
||||
func (p *parserHelper) getSourceInfo() *exprpb.SourceInfo {
|
||||
return &exprpb.SourceInfo{
|
||||
Location: p.source.Description(),
|
||||
Positions: p.positions,
|
||||
LineOffsets: p.source.LineOffsets(),
|
||||
MacroCalls: p.macroCalls}
|
||||
func (p *parserHelper) getSourceInfo() *ast.SourceInfo {
|
||||
return p.sourceInfo
|
||||
}
|
||||
|
||||
func (p *parserHelper) newLiteral(ctx any, value *exprpb.Constant) *exprpb.Expr {
|
||||
exprNode := p.newExpr(ctx)
|
||||
exprNode.ExprKind = &exprpb.Expr_ConstExpr{ConstExpr: value}
|
||||
return exprNode
|
||||
func (p *parserHelper) newLiteral(ctx any, value ref.Val) ast.Expr {
|
||||
return p.exprFactory.NewLiteral(p.newID(ctx), value)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newLiteralBool(ctx any, value bool) *exprpb.Expr {
|
||||
return p.newLiteral(ctx,
|
||||
&exprpb.Constant{ConstantKind: &exprpb.Constant_BoolValue{BoolValue: value}})
|
||||
func (p *parserHelper) newLiteralBool(ctx any, value bool) ast.Expr {
|
||||
return p.newLiteral(ctx, types.Bool(value))
|
||||
}
|
||||
|
||||
func (p *parserHelper) newLiteralString(ctx any, value string) *exprpb.Expr {
|
||||
return p.newLiteral(ctx,
|
||||
&exprpb.Constant{ConstantKind: &exprpb.Constant_StringValue{StringValue: value}})
|
||||
func (p *parserHelper) newLiteralString(ctx any, value string) ast.Expr {
|
||||
return p.newLiteral(ctx, types.String(value))
|
||||
}
|
||||
|
||||
func (p *parserHelper) newLiteralBytes(ctx any, value []byte) *exprpb.Expr {
|
||||
return p.newLiteral(ctx,
|
||||
&exprpb.Constant{ConstantKind: &exprpb.Constant_BytesValue{BytesValue: value}})
|
||||
func (p *parserHelper) newLiteralBytes(ctx any, value []byte) ast.Expr {
|
||||
return p.newLiteral(ctx, types.Bytes(value))
|
||||
}
|
||||
|
||||
func (p *parserHelper) newLiteralInt(ctx any, value int64) *exprpb.Expr {
|
||||
return p.newLiteral(ctx,
|
||||
&exprpb.Constant{ConstantKind: &exprpb.Constant_Int64Value{Int64Value: value}})
|
||||
func (p *parserHelper) newLiteralInt(ctx any, value int64) ast.Expr {
|
||||
return p.newLiteral(ctx, types.Int(value))
|
||||
}
|
||||
|
||||
func (p *parserHelper) newLiteralUint(ctx any, value uint64) *exprpb.Expr {
|
||||
return p.newLiteral(ctx, &exprpb.Constant{ConstantKind: &exprpb.Constant_Uint64Value{Uint64Value: value}})
|
||||
func (p *parserHelper) newLiteralUint(ctx any, value uint64) ast.Expr {
|
||||
return p.newLiteral(ctx, types.Uint(value))
|
||||
}
|
||||
|
||||
func (p *parserHelper) newLiteralDouble(ctx any, value float64) *exprpb.Expr {
|
||||
return p.newLiteral(ctx,
|
||||
&exprpb.Constant{ConstantKind: &exprpb.Constant_DoubleValue{DoubleValue: value}})
|
||||
func (p *parserHelper) newLiteralDouble(ctx any, value float64) ast.Expr {
|
||||
return p.newLiteral(ctx, types.Double(value))
|
||||
}
|
||||
|
||||
func (p *parserHelper) newIdent(ctx any, name string) *exprpb.Expr {
|
||||
exprNode := p.newExpr(ctx)
|
||||
exprNode.ExprKind = &exprpb.Expr_IdentExpr{IdentExpr: &exprpb.Expr_Ident{Name: name}}
|
||||
return exprNode
|
||||
func (p *parserHelper) newIdent(ctx any, name string) ast.Expr {
|
||||
return p.exprFactory.NewIdent(p.newID(ctx), name)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newSelect(ctx any, operand *exprpb.Expr, field string) *exprpb.Expr {
|
||||
exprNode := p.newExpr(ctx)
|
||||
exprNode.ExprKind = &exprpb.Expr_SelectExpr{
|
||||
SelectExpr: &exprpb.Expr_Select{Operand: operand, Field: field}}
|
||||
return exprNode
|
||||
func (p *parserHelper) newSelect(ctx any, operand ast.Expr, field string) ast.Expr {
|
||||
return p.exprFactory.NewSelect(p.newID(ctx), operand, field)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newPresenceTest(ctx any, operand *exprpb.Expr, field string) *exprpb.Expr {
|
||||
exprNode := p.newExpr(ctx)
|
||||
exprNode.ExprKind = &exprpb.Expr_SelectExpr{
|
||||
SelectExpr: &exprpb.Expr_Select{Operand: operand, Field: field, TestOnly: true}}
|
||||
return exprNode
|
||||
func (p *parserHelper) newPresenceTest(ctx any, operand ast.Expr, field string) ast.Expr {
|
||||
return p.exprFactory.NewPresenceTest(p.newID(ctx), operand, field)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newGlobalCall(ctx any, function string, args ...*exprpb.Expr) *exprpb.Expr {
|
||||
exprNode := p.newExpr(ctx)
|
||||
exprNode.ExprKind = &exprpb.Expr_CallExpr{
|
||||
CallExpr: &exprpb.Expr_Call{Function: function, Args: args}}
|
||||
return exprNode
|
||||
func (p *parserHelper) newGlobalCall(ctx any, function string, args ...ast.Expr) ast.Expr {
|
||||
return p.exprFactory.NewCall(p.newID(ctx), function, args...)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newReceiverCall(ctx any, function string, target *exprpb.Expr, args ...*exprpb.Expr) *exprpb.Expr {
|
||||
exprNode := p.newExpr(ctx)
|
||||
exprNode.ExprKind = &exprpb.Expr_CallExpr{
|
||||
CallExpr: &exprpb.Expr_Call{Function: function, Target: target, Args: args}}
|
||||
return exprNode
|
||||
func (p *parserHelper) newReceiverCall(ctx any, function string, target ast.Expr, args ...ast.Expr) ast.Expr {
|
||||
return p.exprFactory.NewMemberCall(p.newID(ctx), function, target, args...)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newList(ctx any, elements []*exprpb.Expr, optionals ...int32) *exprpb.Expr {
|
||||
exprNode := p.newExpr(ctx)
|
||||
exprNode.ExprKind = &exprpb.Expr_ListExpr{
|
||||
ListExpr: &exprpb.Expr_CreateList{
|
||||
Elements: elements,
|
||||
OptionalIndices: optionals,
|
||||
}}
|
||||
return exprNode
|
||||
func (p *parserHelper) newList(ctx any, elements []ast.Expr, optionals ...int32) ast.Expr {
|
||||
return p.exprFactory.NewList(p.newID(ctx), elements, optionals)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newMap(ctx any, entries ...*exprpb.Expr_CreateStruct_Entry) *exprpb.Expr {
|
||||
exprNode := p.newExpr(ctx)
|
||||
exprNode.ExprKind = &exprpb.Expr_StructExpr{
|
||||
StructExpr: &exprpb.Expr_CreateStruct{Entries: entries}}
|
||||
return exprNode
|
||||
func (p *parserHelper) newMap(ctx any, entries ...ast.EntryExpr) ast.Expr {
|
||||
return p.exprFactory.NewMap(p.newID(ctx), entries)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newMapEntry(entryID int64, key *exprpb.Expr, value *exprpb.Expr, optional bool) *exprpb.Expr_CreateStruct_Entry {
|
||||
return &exprpb.Expr_CreateStruct_Entry{
|
||||
Id: entryID,
|
||||
KeyKind: &exprpb.Expr_CreateStruct_Entry_MapKey{MapKey: key},
|
||||
Value: value,
|
||||
OptionalEntry: optional,
|
||||
}
|
||||
func (p *parserHelper) newMapEntry(entryID int64, key ast.Expr, value ast.Expr, optional bool) ast.EntryExpr {
|
||||
return p.exprFactory.NewMapEntry(entryID, key, value, optional)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newObject(ctx any, typeName string, entries ...*exprpb.Expr_CreateStruct_Entry) *exprpb.Expr {
|
||||
exprNode := p.newExpr(ctx)
|
||||
exprNode.ExprKind = &exprpb.Expr_StructExpr{
|
||||
StructExpr: &exprpb.Expr_CreateStruct{
|
||||
MessageName: typeName,
|
||||
Entries: entries,
|
||||
},
|
||||
}
|
||||
return exprNode
|
||||
func (p *parserHelper) newObject(ctx any, typeName string, fields ...ast.EntryExpr) ast.Expr {
|
||||
return p.exprFactory.NewStruct(p.newID(ctx), typeName, fields)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newObjectField(fieldID int64, field string, value *exprpb.Expr, optional bool) *exprpb.Expr_CreateStruct_Entry {
|
||||
return &exprpb.Expr_CreateStruct_Entry{
|
||||
Id: fieldID,
|
||||
KeyKind: &exprpb.Expr_CreateStruct_Entry_FieldKey{FieldKey: field},
|
||||
Value: value,
|
||||
OptionalEntry: optional,
|
||||
}
|
||||
func (p *parserHelper) newObjectField(fieldID int64, field string, value ast.Expr, optional bool) ast.EntryExpr {
|
||||
return p.exprFactory.NewStructField(fieldID, field, value, optional)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newComprehension(ctx any, iterVar string,
|
||||
iterRange *exprpb.Expr,
|
||||
func (p *parserHelper) newComprehension(ctx any,
|
||||
iterRange ast.Expr,
|
||||
iterVar string,
|
||||
accuVar string,
|
||||
accuInit *exprpb.Expr,
|
||||
condition *exprpb.Expr,
|
||||
step *exprpb.Expr,
|
||||
result *exprpb.Expr) *exprpb.Expr {
|
||||
exprNode := p.newExpr(ctx)
|
||||
exprNode.ExprKind = &exprpb.Expr_ComprehensionExpr{
|
||||
ComprehensionExpr: &exprpb.Expr_Comprehension{
|
||||
AccuVar: accuVar,
|
||||
AccuInit: accuInit,
|
||||
IterVar: iterVar,
|
||||
IterRange: iterRange,
|
||||
LoopCondition: condition,
|
||||
LoopStep: step,
|
||||
Result: result}}
|
||||
return exprNode
|
||||
accuInit ast.Expr,
|
||||
condition ast.Expr,
|
||||
step ast.Expr,
|
||||
result ast.Expr) ast.Expr {
|
||||
return p.exprFactory.NewComprehension(
|
||||
p.newID(ctx), iterRange, iterVar, accuVar, accuInit, condition, step, result)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newExpr(ctx any) *exprpb.Expr {
|
||||
id, isID := ctx.(int64)
|
||||
if isID {
|
||||
return &exprpb.Expr{Id: id}
|
||||
func (p *parserHelper) newID(ctx any) int64 {
|
||||
if id, isID := ctx.(int64); isID {
|
||||
return id
|
||||
}
|
||||
return &exprpb.Expr{Id: p.id(ctx)}
|
||||
return p.id(ctx)
|
||||
}
|
||||
|
||||
func (p *parserHelper) newExpr(ctx any) ast.Expr {
|
||||
return p.exprFactory.NewUnspecifiedExpr(p.newID(ctx))
|
||||
}
|
||||
|
||||
func (p *parserHelper) id(ctx any) int64 {
|
||||
var location common.Location
|
||||
var offset ast.OffsetRange
|
||||
switch c := ctx.(type) {
|
||||
case antlr.ParserRuleContext:
|
||||
token := c.GetStart()
|
||||
location = p.source.NewLocation(token.GetLine(), token.GetColumn())
|
||||
start, stop := c.GetStart(), c.GetStop()
|
||||
if stop == nil {
|
||||
stop = start
|
||||
}
|
||||
offset.Start = p.sourceInfo.ComputeOffset(int32(start.GetLine()), int32(start.GetColumn()))
|
||||
offset.Stop = p.sourceInfo.ComputeOffset(int32(stop.GetLine()), int32(stop.GetColumn()))
|
||||
case antlr.Token:
|
||||
token := c
|
||||
location = p.source.NewLocation(token.GetLine(), token.GetColumn())
|
||||
offset.Start = p.sourceInfo.ComputeOffset(int32(c.GetLine()), int32(c.GetColumn()))
|
||||
offset.Stop = offset.Start
|
||||
case common.Location:
|
||||
location = c
|
||||
offset.Start = p.sourceInfo.ComputeOffset(int32(c.Line()), int32(c.Column()))
|
||||
offset.Stop = offset.Start
|
||||
case ast.OffsetRange:
|
||||
offset = c
|
||||
default:
|
||||
// This should only happen if the ctx is nil
|
||||
return -1
|
||||
}
|
||||
id := p.nextID
|
||||
p.positions[id], _ = p.source.LocationOffset(location)
|
||||
p.sourceInfo.SetOffsetRange(id, offset)
|
||||
p.nextID++
|
||||
return id
|
||||
}
|
||||
|
||||
func (p *parserHelper) getLocation(id int64) common.Location {
|
||||
characterOffset := p.positions[id]
|
||||
location, _ := p.source.OffsetLocation(characterOffset)
|
||||
return location
|
||||
return p.sourceInfo.GetStartLocation(id)
|
||||
}
|
||||
|
||||
// buildMacroCallArg iterates the expression and returns a new expression
|
||||
// where all macros have been replaced by their IDs in MacroCalls
|
||||
func (p *parserHelper) buildMacroCallArg(expr *exprpb.Expr) *exprpb.Expr {
|
||||
if _, found := p.macroCalls[expr.GetId()]; found {
|
||||
return &exprpb.Expr{Id: expr.GetId()}
|
||||
func (p *parserHelper) buildMacroCallArg(expr ast.Expr) ast.Expr {
|
||||
if _, found := p.sourceInfo.GetMacroCall(expr.ID()); found {
|
||||
return p.exprFactory.NewUnspecifiedExpr(expr.ID())
|
||||
}
|
||||
|
||||
switch expr.GetExprKind().(type) {
|
||||
case *exprpb.Expr_CallExpr:
|
||||
switch expr.Kind() {
|
||||
case ast.CallKind:
|
||||
// Iterate the AST from `expr` recursively looking for macros. Because we are at most
|
||||
// starting from the top level macro, this recursion is bounded by the size of the AST. This
|
||||
// means that the depth check on the AST during parsing will catch recursion overflows
|
||||
// before we get to here.
|
||||
macroTarget := expr.GetCallExpr().GetTarget()
|
||||
if macroTarget != nil {
|
||||
macroTarget = p.buildMacroCallArg(macroTarget)
|
||||
}
|
||||
macroArgs := make([]*exprpb.Expr, len(expr.GetCallExpr().GetArgs()))
|
||||
for index, arg := range expr.GetCallExpr().GetArgs() {
|
||||
call := expr.AsCall()
|
||||
macroArgs := make([]ast.Expr, len(call.Args()))
|
||||
for index, arg := range call.Args() {
|
||||
macroArgs[index] = p.buildMacroCallArg(arg)
|
||||
}
|
||||
return &exprpb.Expr{
|
||||
Id: expr.GetId(),
|
||||
ExprKind: &exprpb.Expr_CallExpr{
|
||||
CallExpr: &exprpb.Expr_Call{
|
||||
Target: macroTarget,
|
||||
Function: expr.GetCallExpr().GetFunction(),
|
||||
Args: macroArgs,
|
||||
},
|
||||
},
|
||||
if !call.IsMemberFunction() {
|
||||
return p.exprFactory.NewCall(expr.ID(), call.FunctionName(), macroArgs...)
|
||||
}
|
||||
case *exprpb.Expr_ListExpr:
|
||||
listExpr := expr.GetListExpr()
|
||||
macroListArgs := make([]*exprpb.Expr, len(listExpr.GetElements()))
|
||||
for i, elem := range listExpr.GetElements() {
|
||||
macroTarget := p.buildMacroCallArg(call.Target())
|
||||
return p.exprFactory.NewMemberCall(expr.ID(), call.FunctionName(), macroTarget, macroArgs...)
|
||||
case ast.ListKind:
|
||||
list := expr.AsList()
|
||||
macroListArgs := make([]ast.Expr, list.Size())
|
||||
for i, elem := range list.Elements() {
|
||||
macroListArgs[i] = p.buildMacroCallArg(elem)
|
||||
}
|
||||
return &exprpb.Expr{
|
||||
Id: expr.GetId(),
|
||||
ExprKind: &exprpb.Expr_ListExpr{
|
||||
ListExpr: &exprpb.Expr_CreateList{
|
||||
Elements: macroListArgs,
|
||||
OptionalIndices: listExpr.GetOptionalIndices(),
|
||||
},
|
||||
},
|
||||
}
|
||||
return p.exprFactory.NewList(expr.ID(), macroListArgs, list.OptionalIndices())
|
||||
}
|
||||
|
||||
return expr
|
||||
}
|
||||
|
||||
// addMacroCall adds the macro the the MacroCalls map in source info. If a macro has args/subargs/target
|
||||
// that are macros, their ID will be stored instead for later self-lookups.
|
||||
func (p *parserHelper) addMacroCall(exprID int64, function string, target *exprpb.Expr, args ...*exprpb.Expr) {
|
||||
macroTarget := target
|
||||
if target != nil {
|
||||
if _, found := p.macroCalls[target.GetId()]; found {
|
||||
macroTarget = &exprpb.Expr{Id: target.GetId()}
|
||||
} else {
|
||||
macroTarget = p.buildMacroCallArg(target)
|
||||
}
|
||||
}
|
||||
|
||||
macroArgs := make([]*exprpb.Expr, len(args))
|
||||
func (p *parserHelper) addMacroCall(exprID int64, function string, target ast.Expr, args ...ast.Expr) {
|
||||
macroArgs := make([]ast.Expr, len(args))
|
||||
for index, arg := range args {
|
||||
macroArgs[index] = p.buildMacroCallArg(arg)
|
||||
}
|
||||
|
||||
p.macroCalls[exprID] = &exprpb.Expr{
|
||||
ExprKind: &exprpb.Expr_CallExpr{
|
||||
CallExpr: &exprpb.Expr_Call{
|
||||
Target: macroTarget,
|
||||
Function: function,
|
||||
Args: macroArgs,
|
||||
},
|
||||
},
|
||||
if target == nil {
|
||||
p.sourceInfo.SetMacroCall(exprID, p.exprFactory.NewCall(0, function, macroArgs...))
|
||||
return
|
||||
}
|
||||
macroTarget := target
|
||||
if _, found := p.sourceInfo.GetMacroCall(target.ID()); found {
|
||||
macroTarget = p.exprFactory.NewUnspecifiedExpr(target.ID())
|
||||
} else {
|
||||
macroTarget = p.buildMacroCallArg(target)
|
||||
}
|
||||
p.sourceInfo.SetMacroCall(exprID, p.exprFactory.NewMemberCall(0, function, macroTarget, macroArgs...))
|
||||
}
|
||||
|
||||
// logicManager compacts logical trees into a more efficient structure which is semantically
|
||||
@ -309,71 +234,71 @@ func (p *parserHelper) addMacroCall(exprID int64, function string, target *exprp
|
||||
// controversial choice as it alters the traditional order of execution assumptions present in most
|
||||
// expressions.
|
||||
type logicManager struct {
|
||||
helper *parserHelper
|
||||
exprFactory ast.ExprFactory
|
||||
function string
|
||||
terms []*exprpb.Expr
|
||||
terms []ast.Expr
|
||||
ops []int64
|
||||
variadicASTs bool
|
||||
}
|
||||
|
||||
// newVariadicLogicManager creates a logic manager instance bound to a specific function and its first term.
|
||||
func newVariadicLogicManager(h *parserHelper, function string, term *exprpb.Expr) *logicManager {
|
||||
func newVariadicLogicManager(fac ast.ExprFactory, function string, term ast.Expr) *logicManager {
|
||||
return &logicManager{
|
||||
helper: h,
|
||||
exprFactory: fac,
|
||||
function: function,
|
||||
terms: []*exprpb.Expr{term},
|
||||
terms: []ast.Expr{term},
|
||||
ops: []int64{},
|
||||
variadicASTs: true,
|
||||
}
|
||||
}
|
||||
|
||||
// newBalancingLogicManager creates a logic manager instance bound to a specific function and its first term.
|
||||
func newBalancingLogicManager(h *parserHelper, function string, term *exprpb.Expr) *logicManager {
|
||||
func newBalancingLogicManager(fac ast.ExprFactory, function string, term ast.Expr) *logicManager {
|
||||
return &logicManager{
|
||||
helper: h,
|
||||
exprFactory: fac,
|
||||
function: function,
|
||||
terms: []*exprpb.Expr{term},
|
||||
terms: []ast.Expr{term},
|
||||
ops: []int64{},
|
||||
variadicASTs: false,
|
||||
}
|
||||
}
|
||||
|
||||
// addTerm adds an operation identifier and term to the set of terms to be balanced.
|
||||
func (l *logicManager) addTerm(op int64, term *exprpb.Expr) {
|
||||
func (l *logicManager) addTerm(op int64, term ast.Expr) {
|
||||
l.terms = append(l.terms, term)
|
||||
l.ops = append(l.ops, op)
|
||||
}
|
||||
|
||||
// toExpr renders the logic graph into an Expr value, either balancing a tree of logical
|
||||
// operations or creating a variadic representation of the logical operator.
|
||||
func (l *logicManager) toExpr() *exprpb.Expr {
|
||||
func (l *logicManager) toExpr() ast.Expr {
|
||||
if len(l.terms) == 1 {
|
||||
return l.terms[0]
|
||||
}
|
||||
if l.variadicASTs {
|
||||
return l.helper.newGlobalCall(l.ops[0], l.function, l.terms...)
|
||||
return l.exprFactory.NewCall(l.ops[0], l.function, l.terms...)
|
||||
}
|
||||
return l.balancedTree(0, len(l.ops)-1)
|
||||
}
|
||||
|
||||
// balancedTree recursively balances the terms provided to a commutative operator.
|
||||
func (l *logicManager) balancedTree(lo, hi int) *exprpb.Expr {
|
||||
func (l *logicManager) balancedTree(lo, hi int) ast.Expr {
|
||||
mid := (lo + hi + 1) / 2
|
||||
|
||||
var left *exprpb.Expr
|
||||
var left ast.Expr
|
||||
if mid == lo {
|
||||
left = l.terms[mid]
|
||||
} else {
|
||||
left = l.balancedTree(lo, mid-1)
|
||||
}
|
||||
|
||||
var right *exprpb.Expr
|
||||
var right ast.Expr
|
||||
if mid == hi {
|
||||
right = l.terms[mid+1]
|
||||
} else {
|
||||
right = l.balancedTree(mid+1, hi)
|
||||
}
|
||||
return l.helper.newGlobalCall(l.ops[mid], l.function, left, right)
|
||||
return l.exprFactory.NewCall(l.ops[mid], l.function, left, right)
|
||||
}
|
||||
|
||||
type exprHelper struct {
|
||||
@ -387,202 +312,151 @@ func (e *exprHelper) nextMacroID() int64 {
|
||||
|
||||
// Copy implements the ExprHelper interface method by producing a copy of the input Expr value
|
||||
// with a fresh set of numeric identifiers the Expr and all its descendants.
|
||||
func (e *exprHelper) Copy(expr *exprpb.Expr) *exprpb.Expr {
|
||||
copy := e.parserHelper.newExpr(e.parserHelper.getLocation(expr.GetId()))
|
||||
switch expr.GetExprKind().(type) {
|
||||
case *exprpb.Expr_ConstExpr:
|
||||
copy.ExprKind = &exprpb.Expr_ConstExpr{ConstExpr: expr.GetConstExpr()}
|
||||
case *exprpb.Expr_IdentExpr:
|
||||
copy.ExprKind = &exprpb.Expr_IdentExpr{IdentExpr: expr.GetIdentExpr()}
|
||||
case *exprpb.Expr_SelectExpr:
|
||||
op := expr.GetSelectExpr().GetOperand()
|
||||
copy.ExprKind = &exprpb.Expr_SelectExpr{SelectExpr: &exprpb.Expr_Select{
|
||||
Operand: e.Copy(op),
|
||||
Field: expr.GetSelectExpr().GetField(),
|
||||
TestOnly: expr.GetSelectExpr().GetTestOnly(),
|
||||
}}
|
||||
case *exprpb.Expr_CallExpr:
|
||||
call := expr.GetCallExpr()
|
||||
target := call.GetTarget()
|
||||
if target != nil {
|
||||
target = e.Copy(target)
|
||||
func (e *exprHelper) Copy(expr ast.Expr) ast.Expr {
|
||||
offsetRange, _ := e.parserHelper.sourceInfo.GetOffsetRange(expr.ID())
|
||||
copyID := e.parserHelper.newID(offsetRange)
|
||||
switch expr.Kind() {
|
||||
case ast.LiteralKind:
|
||||
return e.exprFactory.NewLiteral(copyID, expr.AsLiteral())
|
||||
case ast.IdentKind:
|
||||
return e.exprFactory.NewIdent(copyID, expr.AsIdent())
|
||||
case ast.SelectKind:
|
||||
sel := expr.AsSelect()
|
||||
op := e.Copy(sel.Operand())
|
||||
if sel.IsTestOnly() {
|
||||
return e.exprFactory.NewPresenceTest(copyID, op, sel.FieldName())
|
||||
}
|
||||
args := call.GetArgs()
|
||||
argsCopy := make([]*exprpb.Expr, len(args))
|
||||
return e.exprFactory.NewSelect(copyID, op, sel.FieldName())
|
||||
case ast.CallKind:
|
||||
call := expr.AsCall()
|
||||
args := call.Args()
|
||||
argsCopy := make([]ast.Expr, len(args))
|
||||
for i, arg := range args {
|
||||
argsCopy[i] = e.Copy(arg)
|
||||
}
|
||||
copy.ExprKind = &exprpb.Expr_CallExpr{
|
||||
CallExpr: &exprpb.Expr_Call{
|
||||
Function: call.GetFunction(),
|
||||
Target: target,
|
||||
Args: argsCopy,
|
||||
},
|
||||
if !call.IsMemberFunction() {
|
||||
return e.exprFactory.NewCall(copyID, call.FunctionName(), argsCopy...)
|
||||
}
|
||||
case *exprpb.Expr_ListExpr:
|
||||
elems := expr.GetListExpr().GetElements()
|
||||
elemsCopy := make([]*exprpb.Expr, len(elems))
|
||||
return e.exprFactory.NewMemberCall(copyID, call.FunctionName(), e.Copy(call.Target()), argsCopy...)
|
||||
case ast.ListKind:
|
||||
list := expr.AsList()
|
||||
elems := list.Elements()
|
||||
elemsCopy := make([]ast.Expr, len(elems))
|
||||
for i, elem := range elems {
|
||||
elemsCopy[i] = e.Copy(elem)
|
||||
}
|
||||
copy.ExprKind = &exprpb.Expr_ListExpr{
|
||||
ListExpr: &exprpb.Expr_CreateList{Elements: elemsCopy},
|
||||
return e.exprFactory.NewList(copyID, elemsCopy, list.OptionalIndices())
|
||||
case ast.MapKind:
|
||||
m := expr.AsMap()
|
||||
entries := m.Entries()
|
||||
entriesCopy := make([]ast.EntryExpr, len(entries))
|
||||
for i, en := range entries {
|
||||
entry := en.AsMapEntry()
|
||||
entryID := e.nextMacroID()
|
||||
entriesCopy[i] = e.exprFactory.NewMapEntry(entryID,
|
||||
e.Copy(entry.Key()), e.Copy(entry.Value()), entry.IsOptional())
|
||||
}
|
||||
case *exprpb.Expr_StructExpr:
|
||||
entries := expr.GetStructExpr().GetEntries()
|
||||
entriesCopy := make([]*exprpb.Expr_CreateStruct_Entry, len(entries))
|
||||
for i, entry := range entries {
|
||||
entryCopy := &exprpb.Expr_CreateStruct_Entry{}
|
||||
entryCopy.Id = e.nextMacroID()
|
||||
switch entry.GetKeyKind().(type) {
|
||||
case *exprpb.Expr_CreateStruct_Entry_FieldKey:
|
||||
entryCopy.KeyKind = &exprpb.Expr_CreateStruct_Entry_FieldKey{
|
||||
FieldKey: entry.GetFieldKey(),
|
||||
}
|
||||
case *exprpb.Expr_CreateStruct_Entry_MapKey:
|
||||
entryCopy.KeyKind = &exprpb.Expr_CreateStruct_Entry_MapKey{
|
||||
MapKey: e.Copy(entry.GetMapKey()),
|
||||
}
|
||||
}
|
||||
entryCopy.Value = e.Copy(entry.GetValue())
|
||||
entriesCopy[i] = entryCopy
|
||||
}
|
||||
copy.ExprKind = &exprpb.Expr_StructExpr{
|
||||
StructExpr: &exprpb.Expr_CreateStruct{
|
||||
MessageName: expr.GetStructExpr().GetMessageName(),
|
||||
Entries: entriesCopy,
|
||||
},
|
||||
}
|
||||
case *exprpb.Expr_ComprehensionExpr:
|
||||
iterRange := e.Copy(expr.GetComprehensionExpr().GetIterRange())
|
||||
accuInit := e.Copy(expr.GetComprehensionExpr().GetAccuInit())
|
||||
cond := e.Copy(expr.GetComprehensionExpr().GetLoopCondition())
|
||||
step := e.Copy(expr.GetComprehensionExpr().GetLoopStep())
|
||||
result := e.Copy(expr.GetComprehensionExpr().GetResult())
|
||||
copy.ExprKind = &exprpb.Expr_ComprehensionExpr{
|
||||
ComprehensionExpr: &exprpb.Expr_Comprehension{
|
||||
IterRange: iterRange,
|
||||
IterVar: expr.GetComprehensionExpr().GetIterVar(),
|
||||
AccuInit: accuInit,
|
||||
AccuVar: expr.GetComprehensionExpr().GetAccuVar(),
|
||||
LoopCondition: cond,
|
||||
LoopStep: step,
|
||||
Result: result,
|
||||
},
|
||||
return e.exprFactory.NewMap(copyID, entriesCopy)
|
||||
case ast.StructKind:
|
||||
s := expr.AsStruct()
|
||||
fields := s.Fields()
|
||||
fieldsCopy := make([]ast.EntryExpr, len(fields))
|
||||
for i, f := range fields {
|
||||
field := f.AsStructField()
|
||||
fieldID := e.nextMacroID()
|
||||
fieldsCopy[i] = e.exprFactory.NewStructField(fieldID,
|
||||
field.Name(), e.Copy(field.Value()), field.IsOptional())
|
||||
}
|
||||
return e.exprFactory.NewStruct(copyID, s.TypeName(), fieldsCopy)
|
||||
case ast.ComprehensionKind:
|
||||
compre := expr.AsComprehension()
|
||||
iterRange := e.Copy(compre.IterRange())
|
||||
accuInit := e.Copy(compre.AccuInit())
|
||||
cond := e.Copy(compre.LoopCondition())
|
||||
step := e.Copy(compre.LoopStep())
|
||||
result := e.Copy(compre.Result())
|
||||
return e.exprFactory.NewComprehension(copyID,
|
||||
iterRange, compre.IterVar(), compre.AccuVar(), accuInit, cond, step, result)
|
||||
}
|
||||
return copy
|
||||
return e.exprFactory.NewUnspecifiedExpr(copyID)
|
||||
}
|
||||
|
||||
// LiteralBool implements the ExprHelper interface method.
|
||||
func (e *exprHelper) LiteralBool(value bool) *exprpb.Expr {
|
||||
return e.parserHelper.newLiteralBool(e.nextMacroID(), value)
|
||||
}
|
||||
|
||||
// LiteralBytes implements the ExprHelper interface method.
|
||||
func (e *exprHelper) LiteralBytes(value []byte) *exprpb.Expr {
|
||||
return e.parserHelper.newLiteralBytes(e.nextMacroID(), value)
|
||||
}
|
||||
|
||||
// LiteralDouble implements the ExprHelper interface method.
|
||||
func (e *exprHelper) LiteralDouble(value float64) *exprpb.Expr {
|
||||
return e.parserHelper.newLiteralDouble(e.nextMacroID(), value)
|
||||
}
|
||||
|
||||
// LiteralInt implements the ExprHelper interface method.
|
||||
func (e *exprHelper) LiteralInt(value int64) *exprpb.Expr {
|
||||
return e.parserHelper.newLiteralInt(e.nextMacroID(), value)
|
||||
}
|
||||
|
||||
// LiteralString implements the ExprHelper interface method.
|
||||
func (e *exprHelper) LiteralString(value string) *exprpb.Expr {
|
||||
return e.parserHelper.newLiteralString(e.nextMacroID(), value)
|
||||
}
|
||||
|
||||
// LiteralUint implements the ExprHelper interface method.
|
||||
func (e *exprHelper) LiteralUint(value uint64) *exprpb.Expr {
|
||||
return e.parserHelper.newLiteralUint(e.nextMacroID(), value)
|
||||
// NewLiteral implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewLiteral(value ref.Val) ast.Expr {
|
||||
return e.exprFactory.NewLiteral(e.nextMacroID(), value)
|
||||
}
|
||||
|
||||
// NewList implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewList(elems ...*exprpb.Expr) *exprpb.Expr {
|
||||
return e.parserHelper.newList(e.nextMacroID(), elems)
|
||||
func (e *exprHelper) NewList(elems ...ast.Expr) ast.Expr {
|
||||
return e.exprFactory.NewList(e.nextMacroID(), elems, []int32{})
|
||||
}
|
||||
|
||||
// NewMap implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewMap(entries ...*exprpb.Expr_CreateStruct_Entry) *exprpb.Expr {
|
||||
return e.parserHelper.newMap(e.nextMacroID(), entries...)
|
||||
func (e *exprHelper) NewMap(entries ...ast.EntryExpr) ast.Expr {
|
||||
return e.exprFactory.NewMap(e.nextMacroID(), entries)
|
||||
}
|
||||
|
||||
// NewMapEntry implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewMapEntry(key *exprpb.Expr, val *exprpb.Expr, optional bool) *exprpb.Expr_CreateStruct_Entry {
|
||||
return e.parserHelper.newMapEntry(e.nextMacroID(), key, val, optional)
|
||||
func (e *exprHelper) NewMapEntry(key ast.Expr, val ast.Expr, optional bool) ast.EntryExpr {
|
||||
return e.exprFactory.NewMapEntry(e.nextMacroID(), key, val, optional)
|
||||
}
|
||||
|
||||
// NewObject implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewObject(typeName string, fieldInits ...*exprpb.Expr_CreateStruct_Entry) *exprpb.Expr {
|
||||
return e.parserHelper.newObject(e.nextMacroID(), typeName, fieldInits...)
|
||||
// NewStruct implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewStruct(typeName string, fieldInits ...ast.EntryExpr) ast.Expr {
|
||||
return e.exprFactory.NewStruct(e.nextMacroID(), typeName, fieldInits)
|
||||
}
|
||||
|
||||
// NewObjectFieldInit implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewObjectFieldInit(field string, init *exprpb.Expr, optional bool) *exprpb.Expr_CreateStruct_Entry {
|
||||
return e.parserHelper.newObjectField(e.nextMacroID(), field, init, optional)
|
||||
// NewStructField implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewStructField(field string, init ast.Expr, optional bool) ast.EntryExpr {
|
||||
return e.exprFactory.NewStructField(e.nextMacroID(), field, init, optional)
|
||||
}
|
||||
|
||||
// Fold implements the ExprHelper interface method.
|
||||
func (e *exprHelper) Fold(iterVar string,
|
||||
iterRange *exprpb.Expr,
|
||||
// NewComprehension implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewComprehension(
|
||||
iterRange ast.Expr,
|
||||
iterVar string,
|
||||
accuVar string,
|
||||
accuInit *exprpb.Expr,
|
||||
condition *exprpb.Expr,
|
||||
step *exprpb.Expr,
|
||||
result *exprpb.Expr) *exprpb.Expr {
|
||||
return e.parserHelper.newComprehension(
|
||||
e.nextMacroID(), iterVar, iterRange, accuVar, accuInit, condition, step, result)
|
||||
accuInit ast.Expr,
|
||||
condition ast.Expr,
|
||||
step ast.Expr,
|
||||
result ast.Expr) ast.Expr {
|
||||
return e.exprFactory.NewComprehension(
|
||||
e.nextMacroID(), iterRange, iterVar, accuVar, accuInit, condition, step, result)
|
||||
}
|
||||
|
||||
// Ident implements the ExprHelper interface method.
|
||||
func (e *exprHelper) Ident(name string) *exprpb.Expr {
|
||||
return e.parserHelper.newIdent(e.nextMacroID(), name)
|
||||
// NewIdent implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewIdent(name string) ast.Expr {
|
||||
return e.exprFactory.NewIdent(e.nextMacroID(), name)
|
||||
}
|
||||
|
||||
// AccuIdent implements the ExprHelper interface method.
|
||||
func (e *exprHelper) AccuIdent() *exprpb.Expr {
|
||||
return e.parserHelper.newIdent(e.nextMacroID(), AccumulatorName)
|
||||
// NewAccuIdent implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewAccuIdent() ast.Expr {
|
||||
return e.exprFactory.NewAccuIdent(e.nextMacroID())
|
||||
}
|
||||
|
||||
// GlobalCall implements the ExprHelper interface method.
|
||||
func (e *exprHelper) GlobalCall(function string, args ...*exprpb.Expr) *exprpb.Expr {
|
||||
return e.parserHelper.newGlobalCall(e.nextMacroID(), function, args...)
|
||||
// NewGlobalCall implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewCall(function string, args ...ast.Expr) ast.Expr {
|
||||
return e.exprFactory.NewCall(e.nextMacroID(), function, args...)
|
||||
}
|
||||
|
||||
// ReceiverCall implements the ExprHelper interface method.
|
||||
func (e *exprHelper) ReceiverCall(function string,
|
||||
target *exprpb.Expr, args ...*exprpb.Expr) *exprpb.Expr {
|
||||
return e.parserHelper.newReceiverCall(e.nextMacroID(), function, target, args...)
|
||||
// NewMemberCall implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewMemberCall(function string, target ast.Expr, args ...ast.Expr) ast.Expr {
|
||||
return e.exprFactory.NewMemberCall(e.nextMacroID(), function, target, args...)
|
||||
}
|
||||
|
||||
// PresenceTest implements the ExprHelper interface method.
|
||||
func (e *exprHelper) PresenceTest(operand *exprpb.Expr, field string) *exprpb.Expr {
|
||||
return e.parserHelper.newPresenceTest(e.nextMacroID(), operand, field)
|
||||
// NewPresenceTest implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewPresenceTest(operand ast.Expr, field string) ast.Expr {
|
||||
return e.exprFactory.NewPresenceTest(e.nextMacroID(), operand, field)
|
||||
}
|
||||
|
||||
// Select implements the ExprHelper interface method.
|
||||
func (e *exprHelper) Select(operand *exprpb.Expr, field string) *exprpb.Expr {
|
||||
return e.parserHelper.newSelect(e.nextMacroID(), operand, field)
|
||||
// NewSelect implements the ExprHelper interface method.
|
||||
func (e *exprHelper) NewSelect(operand ast.Expr, field string) ast.Expr {
|
||||
return e.exprFactory.NewSelect(e.nextMacroID(), operand, field)
|
||||
}
|
||||
|
||||
// OffsetLocation implements the ExprHelper interface method.
|
||||
func (e *exprHelper) OffsetLocation(exprID int64) common.Location {
|
||||
offset, found := e.parserHelper.positions[exprID]
|
||||
if !found {
|
||||
return common.NoLocation
|
||||
}
|
||||
location, found := e.parserHelper.source.OffsetLocation(offset)
|
||||
if !found {
|
||||
return common.NoLocation
|
||||
}
|
||||
return location
|
||||
return e.parserHelper.sourceInfo.GetStartLocation(exprID)
|
||||
}
|
||||
|
||||
// NewError associates an error message with a given expression id, populating the source offset location of the error if possible.
|
||||
|
4
vendor/github.com/google/cel-go/parser/input.go
generated
vendored
4
vendor/github.com/google/cel-go/parser/input.go
generated
vendored
@ -15,7 +15,7 @@
|
||||
package parser
|
||||
|
||||
import (
|
||||
antlr "github.com/antlr/antlr4/runtime/Go/antlr/v4"
|
||||
antlr "github.com/antlr4-go/antlr/v4"
|
||||
|
||||
"github.com/google/cel-go/common/runes"
|
||||
)
|
||||
@ -110,7 +110,7 @@ func (c *charStream) GetTextFromTokens(start, stop antlr.Token) string {
|
||||
}
|
||||
|
||||
// GetTextFromInterval implements (antlr.CharStream).GetTextFromInterval.
|
||||
func (c *charStream) GetTextFromInterval(i *antlr.Interval) string {
|
||||
func (c *charStream) GetTextFromInterval(i antlr.Interval) string {
|
||||
return c.GetText(i.Start, i.Stop)
|
||||
}
|
||||
|
||||
|
192
vendor/github.com/google/cel-go/parser/macro.go
generated
vendored
192
vendor/github.com/google/cel-go/parser/macro.go
generated
vendored
@ -18,9 +18,10 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/google/cel-go/common"
|
||||
"github.com/google/cel-go/common/ast"
|
||||
"github.com/google/cel-go/common/operators"
|
||||
|
||||
exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
|
||||
"github.com/google/cel-go/common/types"
|
||||
"github.com/google/cel-go/common/types/ref"
|
||||
)
|
||||
|
||||
// NewGlobalMacro creates a Macro for a global function with the specified arg count.
|
||||
@ -142,58 +143,38 @@ func makeVarArgMacroKey(name string, receiverStyle bool) string {
|
||||
// and produces as output an Expr ast node.
|
||||
//
|
||||
// Note: when the Macro.IsReceiverStyle() method returns true, the target argument will be nil.
|
||||
type MacroExpander func(eh ExprHelper,
|
||||
target *exprpb.Expr,
|
||||
args []*exprpb.Expr) (*exprpb.Expr, *common.Error)
|
||||
type MacroExpander func(eh ExprHelper, target ast.Expr, args []ast.Expr) (ast.Expr, *common.Error)
|
||||
|
||||
// ExprHelper assists with the manipulation of proto-based Expr values in a manner which is
|
||||
// consistent with the source position and expression id generation code leveraged by both
|
||||
// the parser and type-checker.
|
||||
// ExprHelper assists with the creation of Expr values in a manner which is consistent
|
||||
// the internal semantics and id generation behaviors of the parser and checker libraries.
|
||||
type ExprHelper interface {
|
||||
// Copy the input expression with a brand new set of identifiers.
|
||||
Copy(*exprpb.Expr) *exprpb.Expr
|
||||
Copy(ast.Expr) ast.Expr
|
||||
|
||||
// LiteralBool creates an Expr value for a bool literal.
|
||||
LiteralBool(value bool) *exprpb.Expr
|
||||
// Literal creates an Expr value for a scalar literal value.
|
||||
NewLiteral(value ref.Val) ast.Expr
|
||||
|
||||
// LiteralBytes creates an Expr value for a byte literal.
|
||||
LiteralBytes(value []byte) *exprpb.Expr
|
||||
|
||||
// LiteralDouble creates an Expr value for double literal.
|
||||
LiteralDouble(value float64) *exprpb.Expr
|
||||
|
||||
// LiteralInt creates an Expr value for an int literal.
|
||||
LiteralInt(value int64) *exprpb.Expr
|
||||
|
||||
// LiteralString creates am Expr value for a string literal.
|
||||
LiteralString(value string) *exprpb.Expr
|
||||
|
||||
// LiteralUint creates an Expr value for a uint literal.
|
||||
LiteralUint(value uint64) *exprpb.Expr
|
||||
|
||||
// NewList creates a CreateList instruction where the list is comprised of the optional set
|
||||
// of elements provided as arguments.
|
||||
NewList(elems ...*exprpb.Expr) *exprpb.Expr
|
||||
// NewList creates a list literal instruction with an optional set of elements.
|
||||
NewList(elems ...ast.Expr) ast.Expr
|
||||
|
||||
// NewMap creates a CreateStruct instruction for a map where the map is comprised of the
|
||||
// optional set of key, value entries.
|
||||
NewMap(entries ...*exprpb.Expr_CreateStruct_Entry) *exprpb.Expr
|
||||
NewMap(entries ...ast.EntryExpr) ast.Expr
|
||||
|
||||
// NewMapEntry creates a Map Entry for the key, value pair.
|
||||
NewMapEntry(key *exprpb.Expr, val *exprpb.Expr, optional bool) *exprpb.Expr_CreateStruct_Entry
|
||||
NewMapEntry(key ast.Expr, val ast.Expr, optional bool) ast.EntryExpr
|
||||
|
||||
// NewObject creates a CreateStruct instruction for an object with a given type name and
|
||||
// optional set of field initializers.
|
||||
NewObject(typeName string, fieldInits ...*exprpb.Expr_CreateStruct_Entry) *exprpb.Expr
|
||||
// NewStruct creates a struct literal expression with an optional set of field initializers.
|
||||
NewStruct(typeName string, fieldInits ...ast.EntryExpr) ast.Expr
|
||||
|
||||
// NewObjectFieldInit creates a new Object field initializer from the field name and value.
|
||||
NewObjectFieldInit(field string, init *exprpb.Expr, optional bool) *exprpb.Expr_CreateStruct_Entry
|
||||
// NewStructField creates a new struct field initializer from the field name and value.
|
||||
NewStructField(field string, init ast.Expr, optional bool) ast.EntryExpr
|
||||
|
||||
// Fold creates a fold comprehension instruction.
|
||||
// NewComprehension creates a new comprehension instruction.
|
||||
//
|
||||
// - iterVar is the iteration variable name.
|
||||
// - iterRange represents the expression that resolves to a list or map where the elements or
|
||||
// keys (respectively) will be iterated over.
|
||||
// - iterVar is the iteration variable name.
|
||||
// - accuVar is the accumulation variable name, typically parser.AccumulatorName.
|
||||
// - accuInit is the initial expression whose value will be set for the accuVar prior to
|
||||
// folding.
|
||||
@ -204,31 +185,31 @@ type ExprHelper interface {
|
||||
// The accuVar should not shadow variable names that you would like to reference within the
|
||||
// environment in the step and condition expressions. Presently, the name __result__ is commonly
|
||||
// used by built-in macros but this may change in the future.
|
||||
Fold(iterVar string,
|
||||
iterRange *exprpb.Expr,
|
||||
NewComprehension(iterRange ast.Expr,
|
||||
iterVar string,
|
||||
accuVar string,
|
||||
accuInit *exprpb.Expr,
|
||||
condition *exprpb.Expr,
|
||||
step *exprpb.Expr,
|
||||
result *exprpb.Expr) *exprpb.Expr
|
||||
accuInit ast.Expr,
|
||||
condition ast.Expr,
|
||||
step ast.Expr,
|
||||
result ast.Expr) ast.Expr
|
||||
|
||||
// Ident creates an identifier Expr value.
|
||||
Ident(name string) *exprpb.Expr
|
||||
// NewIdent creates an identifier Expr value.
|
||||
NewIdent(name string) ast.Expr
|
||||
|
||||
// AccuIdent returns an accumulator identifier for use with comprehension results.
|
||||
AccuIdent() *exprpb.Expr
|
||||
// NewAccuIdent returns an accumulator identifier for use with comprehension results.
|
||||
NewAccuIdent() ast.Expr
|
||||
|
||||
// GlobalCall creates a function call Expr value for a global (free) function.
|
||||
GlobalCall(function string, args ...*exprpb.Expr) *exprpb.Expr
|
||||
// NewCall creates a function call Expr value for a global (free) function.
|
||||
NewCall(function string, args ...ast.Expr) ast.Expr
|
||||
|
||||
// ReceiverCall creates a function call Expr value for a receiver-style function.
|
||||
ReceiverCall(function string, target *exprpb.Expr, args ...*exprpb.Expr) *exprpb.Expr
|
||||
// NewMemberCall creates a function call Expr value for a receiver-style function.
|
||||
NewMemberCall(function string, target ast.Expr, args ...ast.Expr) ast.Expr
|
||||
|
||||
// PresenceTest creates a Select TestOnly Expr value for modelling has() semantics.
|
||||
PresenceTest(operand *exprpb.Expr, field string) *exprpb.Expr
|
||||
// NewPresenceTest creates a Select TestOnly Expr value for modelling has() semantics.
|
||||
NewPresenceTest(operand ast.Expr, field string) ast.Expr
|
||||
|
||||
// Select create a field traversal Expr value.
|
||||
Select(operand *exprpb.Expr, field string) *exprpb.Expr
|
||||
// NewSelect create a field traversal Expr value.
|
||||
NewSelect(operand ast.Expr, field string) ast.Expr
|
||||
|
||||
// OffsetLocation returns the Location of the expression identifier.
|
||||
OffsetLocation(exprID int64) common.Location
|
||||
@ -296,21 +277,21 @@ const (
|
||||
// MakeAll expands the input call arguments into a comprehension that returns true if all of the
|
||||
// elements in the range match the predicate expressions:
|
||||
// <iterRange>.all(<iterVar>, <predicate>)
|
||||
func MakeAll(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) {
|
||||
func MakeAll(eh ExprHelper, target ast.Expr, args []ast.Expr) (ast.Expr, *common.Error) {
|
||||
return makeQuantifier(quantifierAll, eh, target, args)
|
||||
}
|
||||
|
||||
// MakeExists expands the input call arguments into a comprehension that returns true if any of the
|
||||
// elements in the range match the predicate expressions:
|
||||
// <iterRange>.exists(<iterVar>, <predicate>)
|
||||
func MakeExists(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) {
|
||||
func MakeExists(eh ExprHelper, target ast.Expr, args []ast.Expr) (ast.Expr, *common.Error) {
|
||||
return makeQuantifier(quantifierExists, eh, target, args)
|
||||
}
|
||||
|
||||
// MakeExistsOne expands the input call arguments into a comprehension that returns true if exactly
|
||||
// one of the elements in the range match the predicate expressions:
|
||||
// <iterRange>.exists_one(<iterVar>, <predicate>)
|
||||
func MakeExistsOne(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) {
|
||||
func MakeExistsOne(eh ExprHelper, target ast.Expr, args []ast.Expr) (ast.Expr, *common.Error) {
|
||||
return makeQuantifier(quantifierExistsOne, eh, target, args)
|
||||
}
|
||||
|
||||
@ -324,14 +305,14 @@ func MakeExistsOne(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*ex
|
||||
//
|
||||
// In the second form only iterVar values which return true when provided to the predicate expression
|
||||
// are transformed.
|
||||
func MakeMap(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) {
|
||||
func MakeMap(eh ExprHelper, target ast.Expr, args []ast.Expr) (ast.Expr, *common.Error) {
|
||||
v, found := extractIdent(args[0])
|
||||
if !found {
|
||||
return nil, eh.NewError(args[0].GetId(), "argument is not an identifier")
|
||||
return nil, eh.NewError(args[0].ID(), "argument is not an identifier")
|
||||
}
|
||||
|
||||
var fn *exprpb.Expr
|
||||
var filter *exprpb.Expr
|
||||
var fn ast.Expr
|
||||
var filter ast.Expr
|
||||
|
||||
if len(args) == 3 {
|
||||
filter = args[1]
|
||||
@ -341,84 +322,83 @@ func MakeMap(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.E
|
||||
fn = args[1]
|
||||
}
|
||||
|
||||
accuExpr := eh.Ident(AccumulatorName)
|
||||
init := eh.NewList()
|
||||
condition := eh.LiteralBool(true)
|
||||
step := eh.GlobalCall(operators.Add, accuExpr, eh.NewList(fn))
|
||||
condition := eh.NewLiteral(types.True)
|
||||
step := eh.NewCall(operators.Add, eh.NewAccuIdent(), eh.NewList(fn))
|
||||
|
||||
if filter != nil {
|
||||
step = eh.GlobalCall(operators.Conditional, filter, step, accuExpr)
|
||||
step = eh.NewCall(operators.Conditional, filter, step, eh.NewAccuIdent())
|
||||
}
|
||||
return eh.Fold(v, target, AccumulatorName, init, condition, step, accuExpr), nil
|
||||
return eh.NewComprehension(target, v, AccumulatorName, init, condition, step, eh.NewAccuIdent()), nil
|
||||
}
|
||||
|
||||
// MakeFilter expands the input call arguments into a comprehension which produces a list which contains
|
||||
// only elements which match the provided predicate expression:
|
||||
// <iterRange>.filter(<iterVar>, <predicate>)
|
||||
func MakeFilter(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) {
|
||||
func MakeFilter(eh ExprHelper, target ast.Expr, args []ast.Expr) (ast.Expr, *common.Error) {
|
||||
v, found := extractIdent(args[0])
|
||||
if !found {
|
||||
return nil, eh.NewError(args[0].GetId(), "argument is not an identifier")
|
||||
return nil, eh.NewError(args[0].ID(), "argument is not an identifier")
|
||||
}
|
||||
|
||||
filter := args[1]
|
||||
accuExpr := eh.Ident(AccumulatorName)
|
||||
init := eh.NewList()
|
||||
condition := eh.LiteralBool(true)
|
||||
step := eh.GlobalCall(operators.Add, accuExpr, eh.NewList(args[0]))
|
||||
step = eh.GlobalCall(operators.Conditional, filter, step, accuExpr)
|
||||
return eh.Fold(v, target, AccumulatorName, init, condition, step, accuExpr), nil
|
||||
condition := eh.NewLiteral(types.True)
|
||||
step := eh.NewCall(operators.Add, eh.NewAccuIdent(), eh.NewList(args[0]))
|
||||
step = eh.NewCall(operators.Conditional, filter, step, eh.NewAccuIdent())
|
||||
return eh.NewComprehension(target, v, AccumulatorName, init, condition, step, eh.NewAccuIdent()), nil
|
||||
}
|
||||
|
||||
// MakeHas expands the input call arguments into a presence test, e.g. has(<operand>.field)
|
||||
func MakeHas(eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) {
|
||||
if s, ok := args[0].ExprKind.(*exprpb.Expr_SelectExpr); ok {
|
||||
return eh.PresenceTest(s.SelectExpr.GetOperand(), s.SelectExpr.GetField()), nil
|
||||
func MakeHas(eh ExprHelper, target ast.Expr, args []ast.Expr) (ast.Expr, *common.Error) {
|
||||
if args[0].Kind() == ast.SelectKind {
|
||||
s := args[0].AsSelect()
|
||||
return eh.NewPresenceTest(s.Operand(), s.FieldName()), nil
|
||||
}
|
||||
return nil, eh.NewError(args[0].GetId(), "invalid argument to has() macro")
|
||||
return nil, eh.NewError(args[0].ID(), "invalid argument to has() macro")
|
||||
}
|
||||
|
||||
func makeQuantifier(kind quantifierKind, eh ExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *common.Error) {
|
||||
func makeQuantifier(kind quantifierKind, eh ExprHelper, target ast.Expr, args []ast.Expr) (ast.Expr, *common.Error) {
|
||||
v, found := extractIdent(args[0])
|
||||
if !found {
|
||||
return nil, eh.NewError(args[0].GetId(), "argument must be a simple name")
|
||||
return nil, eh.NewError(args[0].ID(), "argument must be a simple name")
|
||||
}
|
||||
|
||||
var init *exprpb.Expr
|
||||
var condition *exprpb.Expr
|
||||
var step *exprpb.Expr
|
||||
var result *exprpb.Expr
|
||||
var init ast.Expr
|
||||
var condition ast.Expr
|
||||
var step ast.Expr
|
||||
var result ast.Expr
|
||||
switch kind {
|
||||
case quantifierAll:
|
||||
init = eh.LiteralBool(true)
|
||||
condition = eh.GlobalCall(operators.NotStrictlyFalse, eh.AccuIdent())
|
||||
step = eh.GlobalCall(operators.LogicalAnd, eh.AccuIdent(), args[1])
|
||||
result = eh.AccuIdent()
|
||||
init = eh.NewLiteral(types.True)
|
||||
condition = eh.NewCall(operators.NotStrictlyFalse, eh.NewAccuIdent())
|
||||
step = eh.NewCall(operators.LogicalAnd, eh.NewAccuIdent(), args[1])
|
||||
result = eh.NewAccuIdent()
|
||||
case quantifierExists:
|
||||
init = eh.LiteralBool(false)
|
||||
condition = eh.GlobalCall(
|
||||
init = eh.NewLiteral(types.False)
|
||||
condition = eh.NewCall(
|
||||
operators.NotStrictlyFalse,
|
||||
eh.GlobalCall(operators.LogicalNot, eh.AccuIdent()))
|
||||
step = eh.GlobalCall(operators.LogicalOr, eh.AccuIdent(), args[1])
|
||||
result = eh.AccuIdent()
|
||||
eh.NewCall(operators.LogicalNot, eh.NewAccuIdent()))
|
||||
step = eh.NewCall(operators.LogicalOr, eh.NewAccuIdent(), args[1])
|
||||
result = eh.NewAccuIdent()
|
||||
case quantifierExistsOne:
|
||||
zeroExpr := eh.LiteralInt(0)
|
||||
oneExpr := eh.LiteralInt(1)
|
||||
zeroExpr := eh.NewLiteral(types.Int(0))
|
||||
oneExpr := eh.NewLiteral(types.Int(1))
|
||||
init = zeroExpr
|
||||
condition = eh.LiteralBool(true)
|
||||
step = eh.GlobalCall(operators.Conditional, args[1],
|
||||
eh.GlobalCall(operators.Add, eh.AccuIdent(), oneExpr), eh.AccuIdent())
|
||||
result = eh.GlobalCall(operators.Equals, eh.AccuIdent(), oneExpr)
|
||||
condition = eh.NewLiteral(types.True)
|
||||
step = eh.NewCall(operators.Conditional, args[1],
|
||||
eh.NewCall(operators.Add, eh.NewAccuIdent(), oneExpr), eh.NewAccuIdent())
|
||||
result = eh.NewCall(operators.Equals, eh.NewAccuIdent(), oneExpr)
|
||||
default:
|
||||
return nil, eh.NewError(args[0].GetId(), fmt.Sprintf("unrecognized quantifier '%v'", kind))
|
||||
return nil, eh.NewError(args[0].ID(), fmt.Sprintf("unrecognized quantifier '%v'", kind))
|
||||
}
|
||||
return eh.Fold(v, target, AccumulatorName, init, condition, step, result), nil
|
||||
return eh.NewComprehension(target, v, AccumulatorName, init, condition, step, result), nil
|
||||
}
|
||||
|
||||
func extractIdent(e *exprpb.Expr) (string, bool) {
|
||||
switch e.ExprKind.(type) {
|
||||
case *exprpb.Expr_IdentExpr:
|
||||
return e.GetIdentExpr().GetName(), true
|
||||
func extractIdent(e ast.Expr) (string, bool) {
|
||||
switch e.Kind() {
|
||||
case ast.IdentKind:
|
||||
return e.AsIdent(), true
|
||||
}
|
||||
return "", false
|
||||
}
|
||||
|
189
vendor/github.com/google/cel-go/parser/parser.go
generated
vendored
189
vendor/github.com/google/cel-go/parser/parser.go
generated
vendored
@ -21,17 +21,15 @@ import (
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
antlr "github.com/antlr/antlr4/runtime/Go/antlr/v4"
|
||||
antlr "github.com/antlr4-go/antlr/v4"
|
||||
|
||||
"github.com/google/cel-go/common"
|
||||
"github.com/google/cel-go/common/ast"
|
||||
"github.com/google/cel-go/common/operators"
|
||||
"github.com/google/cel-go/common/runes"
|
||||
"github.com/google/cel-go/common/types"
|
||||
"github.com/google/cel-go/parser/gen"
|
||||
|
||||
exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
|
||||
structpb "google.golang.org/protobuf/types/known/structpb"
|
||||
)
|
||||
|
||||
// Parser encapsulates the context necessary to perform parsing for different expressions.
|
||||
@ -88,11 +86,13 @@ func mustNewParser(opts ...Option) *Parser {
|
||||
}
|
||||
|
||||
// Parse parses the expression represented by source and returns the result.
|
||||
func (p *Parser) Parse(source common.Source) (*exprpb.ParsedExpr, *common.Errors) {
|
||||
func (p *Parser) Parse(source common.Source) (*ast.AST, *common.Errors) {
|
||||
errs := common.NewErrors(source)
|
||||
fac := ast.NewExprFactory()
|
||||
impl := parser{
|
||||
errors: &parseErrors{errs},
|
||||
helper: newParserHelper(source),
|
||||
exprFactory: fac,
|
||||
helper: newParserHelper(source, fac),
|
||||
macros: p.macros,
|
||||
maxRecursionDepth: p.maxRecursionDepth,
|
||||
errorReportingLimit: p.errorReportingLimit,
|
||||
@ -106,18 +106,15 @@ func (p *Parser) Parse(source common.Source) (*exprpb.ParsedExpr, *common.Errors
|
||||
if !ok {
|
||||
buf = runes.NewBuffer(source.Content())
|
||||
}
|
||||
var e *exprpb.Expr
|
||||
var out ast.Expr
|
||||
if buf.Len() > p.expressionSizeCodePointLimit {
|
||||
e = impl.reportError(common.NoLocation,
|
||||
out = impl.reportError(common.NoLocation,
|
||||
"expression code point size exceeds limit: size: %d, limit %d",
|
||||
buf.Len(), p.expressionSizeCodePointLimit)
|
||||
} else {
|
||||
e = impl.parse(buf, source.Description())
|
||||
out = impl.parse(buf, source.Description())
|
||||
}
|
||||
return &exprpb.ParsedExpr{
|
||||
Expr: e,
|
||||
SourceInfo: impl.helper.getSourceInfo(),
|
||||
}, errs
|
||||
return ast.NewAST(out, impl.helper.getSourceInfo()), errs
|
||||
}
|
||||
|
||||
// reservedIds are not legal to use as variables. We exclude them post-parse, as they *are* valid
|
||||
@ -150,7 +147,7 @@ var reservedIds = map[string]struct{}{
|
||||
// This function calls ParseWithMacros with AllMacros.
|
||||
//
|
||||
// Deprecated: Use NewParser().Parse() instead.
|
||||
func Parse(source common.Source) (*exprpb.ParsedExpr, *common.Errors) {
|
||||
func Parse(source common.Source) (*ast.AST, *common.Errors) {
|
||||
return mustNewParser(Macros(AllMacros...)).Parse(source)
|
||||
}
|
||||
|
||||
@ -287,6 +284,7 @@ var _ antlr.ErrorStrategy = &recoveryLimitErrorStrategy{}
|
||||
type parser struct {
|
||||
gen.BaseCELVisitor
|
||||
errors *parseErrors
|
||||
exprFactory ast.ExprFactory
|
||||
helper *parserHelper
|
||||
macros map[string]Macro
|
||||
recursionDepth int
|
||||
@ -300,53 +298,21 @@ type parser struct {
|
||||
enableVariadicOperatorASTs bool
|
||||
}
|
||||
|
||||
var (
|
||||
_ gen.CELVisitor = (*parser)(nil)
|
||||
var _ gen.CELVisitor = (*parser)(nil)
|
||||
|
||||
lexerPool *sync.Pool = &sync.Pool{
|
||||
New: func() any {
|
||||
l := gen.NewCELLexer(nil)
|
||||
l.RemoveErrorListeners()
|
||||
return l
|
||||
},
|
||||
}
|
||||
func (p *parser) parse(expr runes.Buffer, desc string) ast.Expr {
|
||||
lexer := gen.NewCELLexer(newCharStream(expr, desc))
|
||||
lexer.RemoveErrorListeners()
|
||||
lexer.AddErrorListener(p)
|
||||
|
||||
parserPool *sync.Pool = &sync.Pool{
|
||||
New: func() any {
|
||||
p := gen.NewCELParser(nil)
|
||||
p.RemoveErrorListeners()
|
||||
return p
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
func (p *parser) parse(expr runes.Buffer, desc string) *exprpb.Expr {
|
||||
// TODO: get rid of these pools once https://github.com/antlr/antlr4/pull/3571 is in a release
|
||||
lexer := lexerPool.Get().(*gen.CELLexer)
|
||||
prsr := parserPool.Get().(*gen.CELParser)
|
||||
prsr := gen.NewCELParser(antlr.NewCommonTokenStream(lexer, 0))
|
||||
prsr.RemoveErrorListeners()
|
||||
|
||||
prsrListener := &recursionListener{
|
||||
maxDepth: p.maxRecursionDepth,
|
||||
ruleTypeDepth: map[int]*int{},
|
||||
}
|
||||
|
||||
defer func() {
|
||||
// Unfortunately ANTLR Go runtime is missing (*antlr.BaseParser).RemoveParseListeners,
|
||||
// so this is good enough until that is exported.
|
||||
// Reset the lexer and parser before putting them back in the pool.
|
||||
lexer.RemoveErrorListeners()
|
||||
prsr.RemoveParseListener(prsrListener)
|
||||
prsr.RemoveErrorListeners()
|
||||
lexer.SetInputStream(nil)
|
||||
prsr.SetInputStream(nil)
|
||||
lexerPool.Put(lexer)
|
||||
parserPool.Put(prsr)
|
||||
}()
|
||||
|
||||
lexer.SetInputStream(newCharStream(expr, desc))
|
||||
prsr.SetInputStream(antlr.NewCommonTokenStream(lexer, 0))
|
||||
|
||||
lexer.AddErrorListener(p)
|
||||
prsr.AddErrorListener(p)
|
||||
prsr.AddParseListener(prsrListener)
|
||||
|
||||
@ -373,7 +339,7 @@ func (p *parser) parse(expr runes.Buffer, desc string) *exprpb.Expr {
|
||||
}
|
||||
}()
|
||||
|
||||
return p.Visit(prsr.Start()).(*exprpb.Expr)
|
||||
return p.Visit(prsr.Start_()).(ast.Expr)
|
||||
}
|
||||
|
||||
// Visitor implementations.
|
||||
@ -470,26 +436,26 @@ func (p *parser) VisitStart(ctx *gen.StartContext) any {
|
||||
|
||||
// Visit a parse tree produced by CELParser#expr.
|
||||
func (p *parser) VisitExpr(ctx *gen.ExprContext) any {
|
||||
result := p.Visit(ctx.GetE()).(*exprpb.Expr)
|
||||
result := p.Visit(ctx.GetE()).(ast.Expr)
|
||||
if ctx.GetOp() == nil {
|
||||
return result
|
||||
}
|
||||
opID := p.helper.id(ctx.GetOp())
|
||||
ifTrue := p.Visit(ctx.GetE1()).(*exprpb.Expr)
|
||||
ifFalse := p.Visit(ctx.GetE2()).(*exprpb.Expr)
|
||||
ifTrue := p.Visit(ctx.GetE1()).(ast.Expr)
|
||||
ifFalse := p.Visit(ctx.GetE2()).(ast.Expr)
|
||||
return p.globalCallOrMacro(opID, operators.Conditional, result, ifTrue, ifFalse)
|
||||
}
|
||||
|
||||
// Visit a parse tree produced by CELParser#conditionalOr.
|
||||
func (p *parser) VisitConditionalOr(ctx *gen.ConditionalOrContext) any {
|
||||
result := p.Visit(ctx.GetE()).(*exprpb.Expr)
|
||||
result := p.Visit(ctx.GetE()).(ast.Expr)
|
||||
l := p.newLogicManager(operators.LogicalOr, result)
|
||||
rest := ctx.GetE1()
|
||||
for i, op := range ctx.GetOps() {
|
||||
if i >= len(rest) {
|
||||
return p.reportError(ctx, "unexpected character, wanted '||'")
|
||||
}
|
||||
next := p.Visit(rest[i]).(*exprpb.Expr)
|
||||
next := p.Visit(rest[i]).(ast.Expr)
|
||||
opID := p.helper.id(op)
|
||||
l.addTerm(opID, next)
|
||||
}
|
||||
@ -498,14 +464,14 @@ func (p *parser) VisitConditionalOr(ctx *gen.ConditionalOrContext) any {
|
||||
|
||||
// Visit a parse tree produced by CELParser#conditionalAnd.
|
||||
func (p *parser) VisitConditionalAnd(ctx *gen.ConditionalAndContext) any {
|
||||
result := p.Visit(ctx.GetE()).(*exprpb.Expr)
|
||||
result := p.Visit(ctx.GetE()).(ast.Expr)
|
||||
l := p.newLogicManager(operators.LogicalAnd, result)
|
||||
rest := ctx.GetE1()
|
||||
for i, op := range ctx.GetOps() {
|
||||
if i >= len(rest) {
|
||||
return p.reportError(ctx, "unexpected character, wanted '&&'")
|
||||
}
|
||||
next := p.Visit(rest[i]).(*exprpb.Expr)
|
||||
next := p.Visit(rest[i]).(ast.Expr)
|
||||
opID := p.helper.id(op)
|
||||
l.addTerm(opID, next)
|
||||
}
|
||||
@ -519,9 +485,9 @@ func (p *parser) VisitRelation(ctx *gen.RelationContext) any {
|
||||
opText = ctx.GetOp().GetText()
|
||||
}
|
||||
if op, found := operators.Find(opText); found {
|
||||
lhs := p.Visit(ctx.Relation(0)).(*exprpb.Expr)
|
||||
lhs := p.Visit(ctx.Relation(0)).(ast.Expr)
|
||||
opID := p.helper.id(ctx.GetOp())
|
||||
rhs := p.Visit(ctx.Relation(1)).(*exprpb.Expr)
|
||||
rhs := p.Visit(ctx.Relation(1)).(ast.Expr)
|
||||
return p.globalCallOrMacro(opID, op, lhs, rhs)
|
||||
}
|
||||
return p.reportError(ctx, "operator not found")
|
||||
@ -534,9 +500,9 @@ func (p *parser) VisitCalc(ctx *gen.CalcContext) any {
|
||||
opText = ctx.GetOp().GetText()
|
||||
}
|
||||
if op, found := operators.Find(opText); found {
|
||||
lhs := p.Visit(ctx.Calc(0)).(*exprpb.Expr)
|
||||
lhs := p.Visit(ctx.Calc(0)).(ast.Expr)
|
||||
opID := p.helper.id(ctx.GetOp())
|
||||
rhs := p.Visit(ctx.Calc(1)).(*exprpb.Expr)
|
||||
rhs := p.Visit(ctx.Calc(1)).(ast.Expr)
|
||||
return p.globalCallOrMacro(opID, op, lhs, rhs)
|
||||
}
|
||||
return p.reportError(ctx, "operator not found")
|
||||
@ -552,7 +518,7 @@ func (p *parser) VisitLogicalNot(ctx *gen.LogicalNotContext) any {
|
||||
return p.Visit(ctx.Member())
|
||||
}
|
||||
opID := p.helper.id(ctx.GetOps()[0])
|
||||
target := p.Visit(ctx.Member()).(*exprpb.Expr)
|
||||
target := p.Visit(ctx.Member()).(ast.Expr)
|
||||
return p.globalCallOrMacro(opID, operators.LogicalNot, target)
|
||||
}
|
||||
|
||||
@ -561,13 +527,13 @@ func (p *parser) VisitNegate(ctx *gen.NegateContext) any {
|
||||
return p.Visit(ctx.Member())
|
||||
}
|
||||
opID := p.helper.id(ctx.GetOps()[0])
|
||||
target := p.Visit(ctx.Member()).(*exprpb.Expr)
|
||||
target := p.Visit(ctx.Member()).(ast.Expr)
|
||||
return p.globalCallOrMacro(opID, operators.Negate, target)
|
||||
}
|
||||
|
||||
// VisitSelect visits a parse tree produced by CELParser#Select.
|
||||
func (p *parser) VisitSelect(ctx *gen.SelectContext) any {
|
||||
operand := p.Visit(ctx.Member()).(*exprpb.Expr)
|
||||
operand := p.Visit(ctx.Member()).(ast.Expr)
|
||||
// Handle the error case where no valid identifier is specified.
|
||||
if ctx.GetId() == nil || ctx.GetOp() == nil {
|
||||
return p.helper.newExpr(ctx)
|
||||
@ -588,7 +554,7 @@ func (p *parser) VisitSelect(ctx *gen.SelectContext) any {
|
||||
|
||||
// VisitMemberCall visits a parse tree produced by CELParser#MemberCall.
|
||||
func (p *parser) VisitMemberCall(ctx *gen.MemberCallContext) any {
|
||||
operand := p.Visit(ctx.Member()).(*exprpb.Expr)
|
||||
operand := p.Visit(ctx.Member()).(ast.Expr)
|
||||
// Handle the error case where no valid identifier is specified.
|
||||
if ctx.GetId() == nil {
|
||||
return p.helper.newExpr(ctx)
|
||||
@ -600,13 +566,13 @@ func (p *parser) VisitMemberCall(ctx *gen.MemberCallContext) any {
|
||||
|
||||
// Visit a parse tree produced by CELParser#Index.
|
||||
func (p *parser) VisitIndex(ctx *gen.IndexContext) any {
|
||||
target := p.Visit(ctx.Member()).(*exprpb.Expr)
|
||||
target := p.Visit(ctx.Member()).(ast.Expr)
|
||||
// Handle the error case where no valid identifier is specified.
|
||||
if ctx.GetOp() == nil {
|
||||
return p.helper.newExpr(ctx)
|
||||
}
|
||||
opID := p.helper.id(ctx.GetOp())
|
||||
index := p.Visit(ctx.GetIndex()).(*exprpb.Expr)
|
||||
index := p.Visit(ctx.GetIndex()).(ast.Expr)
|
||||
operator := operators.Index
|
||||
if ctx.GetOpt() != nil {
|
||||
if !p.enableOptionalSyntax {
|
||||
@ -630,7 +596,7 @@ func (p *parser) VisitCreateMessage(ctx *gen.CreateMessageContext) any {
|
||||
messageName = "." + messageName
|
||||
}
|
||||
objID := p.helper.id(ctx.GetOp())
|
||||
entries := p.VisitIFieldInitializerList(ctx.GetEntries()).([]*exprpb.Expr_CreateStruct_Entry)
|
||||
entries := p.VisitIFieldInitializerList(ctx.GetEntries()).([]ast.EntryExpr)
|
||||
return p.helper.newObject(objID, messageName, entries...)
|
||||
}
|
||||
|
||||
@ -638,16 +604,16 @@ func (p *parser) VisitCreateMessage(ctx *gen.CreateMessageContext) any {
|
||||
func (p *parser) VisitIFieldInitializerList(ctx gen.IFieldInitializerListContext) any {
|
||||
if ctx == nil || ctx.GetFields() == nil {
|
||||
// This is the result of a syntax error handled elswhere, return empty.
|
||||
return []*exprpb.Expr_CreateStruct_Entry{}
|
||||
return []ast.EntryExpr{}
|
||||
}
|
||||
|
||||
result := make([]*exprpb.Expr_CreateStruct_Entry, len(ctx.GetFields()))
|
||||
result := make([]ast.EntryExpr, len(ctx.GetFields()))
|
||||
cols := ctx.GetCols()
|
||||
vals := ctx.GetValues()
|
||||
for i, f := range ctx.GetFields() {
|
||||
if i >= len(cols) || i >= len(vals) {
|
||||
// This is the result of a syntax error detected elsewhere.
|
||||
return []*exprpb.Expr_CreateStruct_Entry{}
|
||||
return []ast.EntryExpr{}
|
||||
}
|
||||
initID := p.helper.id(cols[i])
|
||||
optField := f.(*gen.OptFieldContext)
|
||||
@ -659,10 +625,10 @@ func (p *parser) VisitIFieldInitializerList(ctx gen.IFieldInitializerListContext
|
||||
// The field may be empty due to a prior error.
|
||||
id := optField.IDENTIFIER()
|
||||
if id == nil {
|
||||
return []*exprpb.Expr_CreateStruct_Entry{}
|
||||
return []ast.EntryExpr{}
|
||||
}
|
||||
fieldName := id.GetText()
|
||||
value := p.Visit(vals[i]).(*exprpb.Expr)
|
||||
value := p.Visit(vals[i]).(ast.Expr)
|
||||
field := p.helper.newObjectField(initID, fieldName, value, optional)
|
||||
result[i] = field
|
||||
}
|
||||
@ -702,9 +668,9 @@ func (p *parser) VisitCreateList(ctx *gen.CreateListContext) any {
|
||||
// Visit a parse tree produced by CELParser#CreateStruct.
|
||||
func (p *parser) VisitCreateStruct(ctx *gen.CreateStructContext) any {
|
||||
structID := p.helper.id(ctx.GetOp())
|
||||
entries := []*exprpb.Expr_CreateStruct_Entry{}
|
||||
entries := []ast.EntryExpr{}
|
||||
if ctx.GetEntries() != nil {
|
||||
entries = p.Visit(ctx.GetEntries()).([]*exprpb.Expr_CreateStruct_Entry)
|
||||
entries = p.Visit(ctx.GetEntries()).([]ast.EntryExpr)
|
||||
}
|
||||
return p.helper.newMap(structID, entries...)
|
||||
}
|
||||
@ -713,17 +679,17 @@ func (p *parser) VisitCreateStruct(ctx *gen.CreateStructContext) any {
|
||||
func (p *parser) VisitMapInitializerList(ctx *gen.MapInitializerListContext) any {
|
||||
if ctx == nil || ctx.GetKeys() == nil {
|
||||
// This is the result of a syntax error handled elswhere, return empty.
|
||||
return []*exprpb.Expr_CreateStruct_Entry{}
|
||||
return []ast.EntryExpr{}
|
||||
}
|
||||
|
||||
result := make([]*exprpb.Expr_CreateStruct_Entry, len(ctx.GetCols()))
|
||||
result := make([]ast.EntryExpr, len(ctx.GetCols()))
|
||||
keys := ctx.GetKeys()
|
||||
vals := ctx.GetValues()
|
||||
for i, col := range ctx.GetCols() {
|
||||
colID := p.helper.id(col)
|
||||
if i >= len(keys) || i >= len(vals) {
|
||||
// This is the result of a syntax error detected elsewhere.
|
||||
return []*exprpb.Expr_CreateStruct_Entry{}
|
||||
return []ast.EntryExpr{}
|
||||
}
|
||||
optKey := keys[i]
|
||||
optional := optKey.GetOpt() != nil
|
||||
@ -731,8 +697,8 @@ func (p *parser) VisitMapInitializerList(ctx *gen.MapInitializerListContext) any
|
||||
p.reportError(optKey, "unsupported syntax '?'")
|
||||
continue
|
||||
}
|
||||
key := p.Visit(optKey.GetE()).(*exprpb.Expr)
|
||||
value := p.Visit(vals[i]).(*exprpb.Expr)
|
||||
key := p.Visit(optKey.GetE()).(ast.Expr)
|
||||
value := p.Visit(vals[i]).(ast.Expr)
|
||||
entry := p.helper.newMapEntry(colID, key, value, optional)
|
||||
result[i] = entry
|
||||
}
|
||||
@ -812,30 +778,27 @@ func (p *parser) VisitBoolFalse(ctx *gen.BoolFalseContext) any {
|
||||
|
||||
// Visit a parse tree produced by CELParser#Null.
|
||||
func (p *parser) VisitNull(ctx *gen.NullContext) any {
|
||||
return p.helper.newLiteral(ctx,
|
||||
&exprpb.Constant{
|
||||
ConstantKind: &exprpb.Constant_NullValue{
|
||||
NullValue: structpb.NullValue_NULL_VALUE}})
|
||||
return p.helper.exprFactory.NewLiteral(p.helper.newID(ctx), types.NullValue)
|
||||
}
|
||||
|
||||
func (p *parser) visitExprList(ctx gen.IExprListContext) []*exprpb.Expr {
|
||||
func (p *parser) visitExprList(ctx gen.IExprListContext) []ast.Expr {
|
||||
if ctx == nil {
|
||||
return []*exprpb.Expr{}
|
||||
return []ast.Expr{}
|
||||
}
|
||||
return p.visitSlice(ctx.GetE())
|
||||
}
|
||||
|
||||
func (p *parser) visitListInit(ctx gen.IListInitContext) ([]*exprpb.Expr, []int32) {
|
||||
func (p *parser) visitListInit(ctx gen.IListInitContext) ([]ast.Expr, []int32) {
|
||||
if ctx == nil {
|
||||
return []*exprpb.Expr{}, []int32{}
|
||||
return []ast.Expr{}, []int32{}
|
||||
}
|
||||
elements := ctx.GetElems()
|
||||
result := make([]*exprpb.Expr, len(elements))
|
||||
result := make([]ast.Expr, len(elements))
|
||||
optionals := []int32{}
|
||||
for i, e := range elements {
|
||||
ex := p.Visit(e.GetE()).(*exprpb.Expr)
|
||||
ex := p.Visit(e.GetE()).(ast.Expr)
|
||||
if ex == nil {
|
||||
return []*exprpb.Expr{}, []int32{}
|
||||
return []ast.Expr{}, []int32{}
|
||||
}
|
||||
result[i] = ex
|
||||
if e.GetOpt() != nil {
|
||||
@ -849,13 +812,13 @@ func (p *parser) visitListInit(ctx gen.IListInitContext) ([]*exprpb.Expr, []int3
|
||||
return result, optionals
|
||||
}
|
||||
|
||||
func (p *parser) visitSlice(expressions []gen.IExprContext) []*exprpb.Expr {
|
||||
func (p *parser) visitSlice(expressions []gen.IExprContext) []ast.Expr {
|
||||
if expressions == nil {
|
||||
return []*exprpb.Expr{}
|
||||
return []ast.Expr{}
|
||||
}
|
||||
result := make([]*exprpb.Expr, len(expressions))
|
||||
result := make([]ast.Expr, len(expressions))
|
||||
for i, e := range expressions {
|
||||
ex := p.Visit(e).(*exprpb.Expr)
|
||||
ex := p.Visit(e).(ast.Expr)
|
||||
result[i] = ex
|
||||
}
|
||||
return result
|
||||
@ -870,24 +833,24 @@ func (p *parser) unquote(ctx any, value string, isBytes bool) string {
|
||||
return text
|
||||
}
|
||||
|
||||
func (p *parser) newLogicManager(function string, term *exprpb.Expr) *logicManager {
|
||||
func (p *parser) newLogicManager(function string, term ast.Expr) *logicManager {
|
||||
if p.enableVariadicOperatorASTs {
|
||||
return newVariadicLogicManager(p.helper, function, term)
|
||||
return newVariadicLogicManager(p.exprFactory, function, term)
|
||||
}
|
||||
return newBalancingLogicManager(p.helper, function, term)
|
||||
return newBalancingLogicManager(p.exprFactory, function, term)
|
||||
}
|
||||
|
||||
func (p *parser) reportError(ctx any, format string, args ...any) *exprpb.Expr {
|
||||
func (p *parser) reportError(ctx any, format string, args ...any) ast.Expr {
|
||||
var location common.Location
|
||||
err := p.helper.newExpr(ctx)
|
||||
switch c := ctx.(type) {
|
||||
case common.Location:
|
||||
location = c
|
||||
case antlr.Token, antlr.ParserRuleContext:
|
||||
location = p.helper.getLocation(err.GetId())
|
||||
location = p.helper.getLocation(err.ID())
|
||||
}
|
||||
// Provide arguments to the report error.
|
||||
p.errors.reportErrorAtID(err.GetId(), location, format, args...)
|
||||
p.errors.reportErrorAtID(err.ID(), location, format, args...)
|
||||
return err
|
||||
}
|
||||
|
||||
@ -912,33 +875,33 @@ func (p *parser) SyntaxError(recognizer antlr.Recognizer, offendingSymbol any, l
|
||||
}
|
||||
}
|
||||
|
||||
func (p *parser) ReportAmbiguity(recognizer antlr.Parser, dfa *antlr.DFA, startIndex, stopIndex int, exact bool, ambigAlts *antlr.BitSet, configs antlr.ATNConfigSet) {
|
||||
func (p *parser) ReportAmbiguity(recognizer antlr.Parser, dfa *antlr.DFA, startIndex, stopIndex int, exact bool, ambigAlts *antlr.BitSet, configs *antlr.ATNConfigSet) {
|
||||
// Intentional
|
||||
}
|
||||
|
||||
func (p *parser) ReportAttemptingFullContext(recognizer antlr.Parser, dfa *antlr.DFA, startIndex, stopIndex int, conflictingAlts *antlr.BitSet, configs antlr.ATNConfigSet) {
|
||||
func (p *parser) ReportAttemptingFullContext(recognizer antlr.Parser, dfa *antlr.DFA, startIndex, stopIndex int, conflictingAlts *antlr.BitSet, configs *antlr.ATNConfigSet) {
|
||||
// Intentional
|
||||
}
|
||||
|
||||
func (p *parser) ReportContextSensitivity(recognizer antlr.Parser, dfa *antlr.DFA, startIndex, stopIndex, prediction int, configs antlr.ATNConfigSet) {
|
||||
func (p *parser) ReportContextSensitivity(recognizer antlr.Parser, dfa *antlr.DFA, startIndex, stopIndex, prediction int, configs *antlr.ATNConfigSet) {
|
||||
// Intentional
|
||||
}
|
||||
|
||||
func (p *parser) globalCallOrMacro(exprID int64, function string, args ...*exprpb.Expr) *exprpb.Expr {
|
||||
func (p *parser) globalCallOrMacro(exprID int64, function string, args ...ast.Expr) ast.Expr {
|
||||
if expr, found := p.expandMacro(exprID, function, nil, args...); found {
|
||||
return expr
|
||||
}
|
||||
return p.helper.newGlobalCall(exprID, function, args...)
|
||||
}
|
||||
|
||||
func (p *parser) receiverCallOrMacro(exprID int64, function string, target *exprpb.Expr, args ...*exprpb.Expr) *exprpb.Expr {
|
||||
func (p *parser) receiverCallOrMacro(exprID int64, function string, target ast.Expr, args ...ast.Expr) ast.Expr {
|
||||
if expr, found := p.expandMacro(exprID, function, target, args...); found {
|
||||
return expr
|
||||
}
|
||||
return p.helper.newReceiverCall(exprID, function, target, args...)
|
||||
}
|
||||
|
||||
func (p *parser) expandMacro(exprID int64, function string, target *exprpb.Expr, args ...*exprpb.Expr) (*exprpb.Expr, bool) {
|
||||
func (p *parser) expandMacro(exprID int64, function string, target ast.Expr, args ...ast.Expr) (ast.Expr, bool) {
|
||||
macro, found := p.macros[makeMacroKey(function, len(args), target != nil)]
|
||||
if !found {
|
||||
macro, found = p.macros[makeVarArgMacroKey(function, target != nil)]
|
||||
@ -964,7 +927,7 @@ func (p *parser) expandMacro(exprID int64, function string, target *exprpb.Expr,
|
||||
return nil, false
|
||||
}
|
||||
if p.populateMacroCalls {
|
||||
p.helper.addMacroCall(expr.GetId(), function, target, args...)
|
||||
p.helper.addMacroCall(expr.ID(), function, target, args...)
|
||||
}
|
||||
return expr, true
|
||||
}
|
||||
|
222
vendor/github.com/google/cel-go/parser/unparser.go
generated
vendored
222
vendor/github.com/google/cel-go/parser/unparser.go
generated
vendored
@ -20,9 +20,9 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/google/cel-go/common/ast"
|
||||
"github.com/google/cel-go/common/operators"
|
||||
|
||||
exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
|
||||
"github.com/google/cel-go/common/types"
|
||||
)
|
||||
|
||||
// Unparse takes an input expression and source position information and generates a human-readable
|
||||
@ -39,7 +39,7 @@ import (
|
||||
//
|
||||
// This function optionally takes in one or more UnparserOption to alter the unparsing behavior, such as
|
||||
// performing word wrapping on expressions.
|
||||
func Unparse(expr *exprpb.Expr, info *exprpb.SourceInfo, opts ...UnparserOption) (string, error) {
|
||||
func Unparse(expr ast.Expr, info *ast.SourceInfo, opts ...UnparserOption) (string, error) {
|
||||
unparserOpts := &unparserOption{
|
||||
wrapOnColumn: defaultWrapOnColumn,
|
||||
wrapAfterColumnLimit: defaultWrapAfterColumnLimit,
|
||||
@ -68,12 +68,12 @@ func Unparse(expr *exprpb.Expr, info *exprpb.SourceInfo, opts ...UnparserOption)
|
||||
// unparser visits an expression to reconstruct a human-readable string from an AST.
|
||||
type unparser struct {
|
||||
str strings.Builder
|
||||
info *exprpb.SourceInfo
|
||||
info *ast.SourceInfo
|
||||
options *unparserOption
|
||||
lastWrappedIndex int
|
||||
}
|
||||
|
||||
func (un *unparser) visit(expr *exprpb.Expr) error {
|
||||
func (un *unparser) visit(expr ast.Expr) error {
|
||||
if expr == nil {
|
||||
return errors.New("unsupported expression")
|
||||
}
|
||||
@ -81,27 +81,29 @@ func (un *unparser) visit(expr *exprpb.Expr) error {
|
||||
if visited || err != nil {
|
||||
return err
|
||||
}
|
||||
switch expr.GetExprKind().(type) {
|
||||
case *exprpb.Expr_CallExpr:
|
||||
switch expr.Kind() {
|
||||
case ast.CallKind:
|
||||
return un.visitCall(expr)
|
||||
case *exprpb.Expr_ConstExpr:
|
||||
case ast.LiteralKind:
|
||||
return un.visitConst(expr)
|
||||
case *exprpb.Expr_IdentExpr:
|
||||
case ast.IdentKind:
|
||||
return un.visitIdent(expr)
|
||||
case *exprpb.Expr_ListExpr:
|
||||
case ast.ListKind:
|
||||
return un.visitList(expr)
|
||||
case *exprpb.Expr_SelectExpr:
|
||||
case ast.MapKind:
|
||||
return un.visitStructMap(expr)
|
||||
case ast.SelectKind:
|
||||
return un.visitSelect(expr)
|
||||
case *exprpb.Expr_StructExpr:
|
||||
return un.visitStruct(expr)
|
||||
case ast.StructKind:
|
||||
return un.visitStructMsg(expr)
|
||||
default:
|
||||
return fmt.Errorf("unsupported expression: %v", expr)
|
||||
}
|
||||
}
|
||||
|
||||
func (un *unparser) visitCall(expr *exprpb.Expr) error {
|
||||
c := expr.GetCallExpr()
|
||||
fun := c.GetFunction()
|
||||
func (un *unparser) visitCall(expr ast.Expr) error {
|
||||
c := expr.AsCall()
|
||||
fun := c.FunctionName()
|
||||
switch fun {
|
||||
// ternary operator
|
||||
case operators.Conditional:
|
||||
@ -141,10 +143,10 @@ func (un *unparser) visitCall(expr *exprpb.Expr) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (un *unparser) visitCallBinary(expr *exprpb.Expr) error {
|
||||
c := expr.GetCallExpr()
|
||||
fun := c.GetFunction()
|
||||
args := c.GetArgs()
|
||||
func (un *unparser) visitCallBinary(expr ast.Expr) error {
|
||||
c := expr.AsCall()
|
||||
fun := c.FunctionName()
|
||||
args := c.Args()
|
||||
lhs := args[0]
|
||||
// add parens if the current operator is lower precedence than the lhs expr operator.
|
||||
lhsParen := isComplexOperatorWithRespectTo(fun, lhs)
|
||||
@ -168,9 +170,9 @@ func (un *unparser) visitCallBinary(expr *exprpb.Expr) error {
|
||||
return un.visitMaybeNested(rhs, rhsParen)
|
||||
}
|
||||
|
||||
func (un *unparser) visitCallConditional(expr *exprpb.Expr) error {
|
||||
c := expr.GetCallExpr()
|
||||
args := c.GetArgs()
|
||||
func (un *unparser) visitCallConditional(expr ast.Expr) error {
|
||||
c := expr.AsCall()
|
||||
args := c.Args()
|
||||
// add parens if operand is a conditional itself.
|
||||
nested := isSamePrecedence(operators.Conditional, args[0]) ||
|
||||
isComplexOperator(args[0])
|
||||
@ -196,13 +198,13 @@ func (un *unparser) visitCallConditional(expr *exprpb.Expr) error {
|
||||
return un.visitMaybeNested(args[2], nested)
|
||||
}
|
||||
|
||||
func (un *unparser) visitCallFunc(expr *exprpb.Expr) error {
|
||||
c := expr.GetCallExpr()
|
||||
fun := c.GetFunction()
|
||||
args := c.GetArgs()
|
||||
if c.GetTarget() != nil {
|
||||
nested := isBinaryOrTernaryOperator(c.GetTarget())
|
||||
err := un.visitMaybeNested(c.GetTarget(), nested)
|
||||
func (un *unparser) visitCallFunc(expr ast.Expr) error {
|
||||
c := expr.AsCall()
|
||||
fun := c.FunctionName()
|
||||
args := c.Args()
|
||||
if c.IsMemberFunction() {
|
||||
nested := isBinaryOrTernaryOperator(c.Target())
|
||||
err := un.visitMaybeNested(c.Target(), nested)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -223,17 +225,17 @@ func (un *unparser) visitCallFunc(expr *exprpb.Expr) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (un *unparser) visitCallIndex(expr *exprpb.Expr) error {
|
||||
func (un *unparser) visitCallIndex(expr ast.Expr) error {
|
||||
return un.visitCallIndexInternal(expr, "[")
|
||||
}
|
||||
|
||||
func (un *unparser) visitCallOptIndex(expr *exprpb.Expr) error {
|
||||
func (un *unparser) visitCallOptIndex(expr ast.Expr) error {
|
||||
return un.visitCallIndexInternal(expr, "[?")
|
||||
}
|
||||
|
||||
func (un *unparser) visitCallIndexInternal(expr *exprpb.Expr, op string) error {
|
||||
c := expr.GetCallExpr()
|
||||
args := c.GetArgs()
|
||||
func (un *unparser) visitCallIndexInternal(expr ast.Expr, op string) error {
|
||||
c := expr.AsCall()
|
||||
args := c.Args()
|
||||
nested := isBinaryOrTernaryOperator(args[0])
|
||||
err := un.visitMaybeNested(args[0], nested)
|
||||
if err != nil {
|
||||
@ -248,10 +250,10 @@ func (un *unparser) visitCallIndexInternal(expr *exprpb.Expr, op string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (un *unparser) visitCallUnary(expr *exprpb.Expr) error {
|
||||
c := expr.GetCallExpr()
|
||||
fun := c.GetFunction()
|
||||
args := c.GetArgs()
|
||||
func (un *unparser) visitCallUnary(expr ast.Expr) error {
|
||||
c := expr.AsCall()
|
||||
fun := c.FunctionName()
|
||||
args := c.Args()
|
||||
unmangled, found := operators.FindReverse(fun)
|
||||
if !found {
|
||||
return fmt.Errorf("cannot unmangle operator: %s", fun)
|
||||
@ -261,35 +263,34 @@ func (un *unparser) visitCallUnary(expr *exprpb.Expr) error {
|
||||
return un.visitMaybeNested(args[0], nested)
|
||||
}
|
||||
|
||||
func (un *unparser) visitConst(expr *exprpb.Expr) error {
|
||||
c := expr.GetConstExpr()
|
||||
switch c.GetConstantKind().(type) {
|
||||
case *exprpb.Constant_BoolValue:
|
||||
un.str.WriteString(strconv.FormatBool(c.GetBoolValue()))
|
||||
case *exprpb.Constant_BytesValue:
|
||||
func (un *unparser) visitConst(expr ast.Expr) error {
|
||||
val := expr.AsLiteral()
|
||||
switch val := val.(type) {
|
||||
case types.Bool:
|
||||
un.str.WriteString(strconv.FormatBool(bool(val)))
|
||||
case types.Bytes:
|
||||
// bytes constants are surrounded with b"<bytes>"
|
||||
b := c.GetBytesValue()
|
||||
un.str.WriteString(`b"`)
|
||||
un.str.WriteString(bytesToOctets(b))
|
||||
un.str.WriteString(bytesToOctets([]byte(val)))
|
||||
un.str.WriteString(`"`)
|
||||
case *exprpb.Constant_DoubleValue:
|
||||
case types.Double:
|
||||
// represent the float using the minimum required digits
|
||||
d := strconv.FormatFloat(c.GetDoubleValue(), 'g', -1, 64)
|
||||
d := strconv.FormatFloat(float64(val), 'g', -1, 64)
|
||||
un.str.WriteString(d)
|
||||
if !strings.Contains(d, ".") {
|
||||
un.str.WriteString(".0")
|
||||
}
|
||||
case *exprpb.Constant_Int64Value:
|
||||
i := strconv.FormatInt(c.GetInt64Value(), 10)
|
||||
case types.Int:
|
||||
i := strconv.FormatInt(int64(val), 10)
|
||||
un.str.WriteString(i)
|
||||
case *exprpb.Constant_NullValue:
|
||||
case types.Null:
|
||||
un.str.WriteString("null")
|
||||
case *exprpb.Constant_StringValue:
|
||||
case types.String:
|
||||
// strings will be double quoted with quotes escaped.
|
||||
un.str.WriteString(strconv.Quote(c.GetStringValue()))
|
||||
case *exprpb.Constant_Uint64Value:
|
||||
un.str.WriteString(strconv.Quote(string(val)))
|
||||
case types.Uint:
|
||||
// uint literals have a 'u' suffix.
|
||||
ui := strconv.FormatUint(c.GetUint64Value(), 10)
|
||||
ui := strconv.FormatUint(uint64(val), 10)
|
||||
un.str.WriteString(ui)
|
||||
un.str.WriteString("u")
|
||||
default:
|
||||
@ -298,16 +299,16 @@ func (un *unparser) visitConst(expr *exprpb.Expr) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (un *unparser) visitIdent(expr *exprpb.Expr) error {
|
||||
un.str.WriteString(expr.GetIdentExpr().GetName())
|
||||
func (un *unparser) visitIdent(expr ast.Expr) error {
|
||||
un.str.WriteString(expr.AsIdent())
|
||||
return nil
|
||||
}
|
||||
|
||||
func (un *unparser) visitList(expr *exprpb.Expr) error {
|
||||
l := expr.GetListExpr()
|
||||
elems := l.GetElements()
|
||||
func (un *unparser) visitList(expr ast.Expr) error {
|
||||
l := expr.AsList()
|
||||
elems := l.Elements()
|
||||
optIndices := make(map[int]bool, len(elems))
|
||||
for _, idx := range l.GetOptionalIndices() {
|
||||
for _, idx := range l.OptionalIndices() {
|
||||
optIndices[int(idx)] = true
|
||||
}
|
||||
un.str.WriteString("[")
|
||||
@ -327,20 +328,20 @@ func (un *unparser) visitList(expr *exprpb.Expr) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (un *unparser) visitOptSelect(expr *exprpb.Expr) error {
|
||||
c := expr.GetCallExpr()
|
||||
args := c.GetArgs()
|
||||
func (un *unparser) visitOptSelect(expr ast.Expr) error {
|
||||
c := expr.AsCall()
|
||||
args := c.Args()
|
||||
operand := args[0]
|
||||
field := args[1].GetConstExpr().GetStringValue()
|
||||
return un.visitSelectInternal(operand, false, ".?", field)
|
||||
field := args[1].AsLiteral().(types.String)
|
||||
return un.visitSelectInternal(operand, false, ".?", string(field))
|
||||
}
|
||||
|
||||
func (un *unparser) visitSelect(expr *exprpb.Expr) error {
|
||||
sel := expr.GetSelectExpr()
|
||||
return un.visitSelectInternal(sel.GetOperand(), sel.GetTestOnly(), ".", sel.GetField())
|
||||
func (un *unparser) visitSelect(expr ast.Expr) error {
|
||||
sel := expr.AsSelect()
|
||||
return un.visitSelectInternal(sel.Operand(), sel.IsTestOnly(), ".", sel.FieldName())
|
||||
}
|
||||
|
||||
func (un *unparser) visitSelectInternal(operand *exprpb.Expr, testOnly bool, op string, field string) error {
|
||||
func (un *unparser) visitSelectInternal(operand ast.Expr, testOnly bool, op string, field string) error {
|
||||
// handle the case when the select expression was generated by the has() macro.
|
||||
if testOnly {
|
||||
un.str.WriteString("has(")
|
||||
@ -358,34 +359,25 @@ func (un *unparser) visitSelectInternal(operand *exprpb.Expr, testOnly bool, op
|
||||
return nil
|
||||
}
|
||||
|
||||
func (un *unparser) visitStruct(expr *exprpb.Expr) error {
|
||||
s := expr.GetStructExpr()
|
||||
// If the message name is non-empty, then this should be treated as message construction.
|
||||
if s.GetMessageName() != "" {
|
||||
return un.visitStructMsg(expr)
|
||||
}
|
||||
// Otherwise, build a map.
|
||||
return un.visitStructMap(expr)
|
||||
}
|
||||
|
||||
func (un *unparser) visitStructMsg(expr *exprpb.Expr) error {
|
||||
m := expr.GetStructExpr()
|
||||
entries := m.GetEntries()
|
||||
un.str.WriteString(m.GetMessageName())
|
||||
func (un *unparser) visitStructMsg(expr ast.Expr) error {
|
||||
m := expr.AsStruct()
|
||||
fields := m.Fields()
|
||||
un.str.WriteString(m.TypeName())
|
||||
un.str.WriteString("{")
|
||||
for i, entry := range entries {
|
||||
f := entry.GetFieldKey()
|
||||
if entry.GetOptionalEntry() {
|
||||
for i, f := range fields {
|
||||
field := f.AsStructField()
|
||||
f := field.Name()
|
||||
if field.IsOptional() {
|
||||
un.str.WriteString("?")
|
||||
}
|
||||
un.str.WriteString(f)
|
||||
un.str.WriteString(": ")
|
||||
v := entry.GetValue()
|
||||
v := field.Value()
|
||||
err := un.visit(v)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if i < len(entries)-1 {
|
||||
if i < len(fields)-1 {
|
||||
un.str.WriteString(", ")
|
||||
}
|
||||
}
|
||||
@ -393,13 +385,14 @@ func (un *unparser) visitStructMsg(expr *exprpb.Expr) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (un *unparser) visitStructMap(expr *exprpb.Expr) error {
|
||||
m := expr.GetStructExpr()
|
||||
entries := m.GetEntries()
|
||||
func (un *unparser) visitStructMap(expr ast.Expr) error {
|
||||
m := expr.AsMap()
|
||||
entries := m.Entries()
|
||||
un.str.WriteString("{")
|
||||
for i, entry := range entries {
|
||||
k := entry.GetMapKey()
|
||||
if entry.GetOptionalEntry() {
|
||||
for i, e := range entries {
|
||||
entry := e.AsMapEntry()
|
||||
k := entry.Key()
|
||||
if entry.IsOptional() {
|
||||
un.str.WriteString("?")
|
||||
}
|
||||
err := un.visit(k)
|
||||
@ -407,7 +400,7 @@ func (un *unparser) visitStructMap(expr *exprpb.Expr) error {
|
||||
return err
|
||||
}
|
||||
un.str.WriteString(": ")
|
||||
v := entry.GetValue()
|
||||
v := entry.Value()
|
||||
err = un.visit(v)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -420,16 +413,15 @@ func (un *unparser) visitStructMap(expr *exprpb.Expr) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (un *unparser) visitMaybeMacroCall(expr *exprpb.Expr) (bool, error) {
|
||||
macroCalls := un.info.GetMacroCalls()
|
||||
call, found := macroCalls[expr.GetId()]
|
||||
func (un *unparser) visitMaybeMacroCall(expr ast.Expr) (bool, error) {
|
||||
call, found := un.info.GetMacroCall(expr.ID())
|
||||
if !found {
|
||||
return false, nil
|
||||
}
|
||||
return true, un.visit(call)
|
||||
}
|
||||
|
||||
func (un *unparser) visitMaybeNested(expr *exprpb.Expr, nested bool) error {
|
||||
func (un *unparser) visitMaybeNested(expr ast.Expr, nested bool) error {
|
||||
if nested {
|
||||
un.str.WriteString("(")
|
||||
}
|
||||
@ -453,12 +445,12 @@ func isLeftRecursive(op string) bool {
|
||||
// precedence of the (possible) operation represented in the input Expr.
|
||||
//
|
||||
// If the expr is not a Call, the result is false.
|
||||
func isSamePrecedence(op string, expr *exprpb.Expr) bool {
|
||||
if expr.GetCallExpr() == nil {
|
||||
func isSamePrecedence(op string, expr ast.Expr) bool {
|
||||
if expr.Kind() != ast.CallKind {
|
||||
return false
|
||||
}
|
||||
c := expr.GetCallExpr()
|
||||
other := c.GetFunction()
|
||||
c := expr.AsCall()
|
||||
other := c.FunctionName()
|
||||
return operators.Precedence(op) == operators.Precedence(other)
|
||||
}
|
||||
|
||||
@ -466,16 +458,16 @@ func isSamePrecedence(op string, expr *exprpb.Expr) bool {
|
||||
// than the (possible) operation represented in the input Expr.
|
||||
//
|
||||
// If the expr is not a Call, the result is false.
|
||||
func isLowerPrecedence(op string, expr *exprpb.Expr) bool {
|
||||
c := expr.GetCallExpr()
|
||||
other := c.GetFunction()
|
||||
func isLowerPrecedence(op string, expr ast.Expr) bool {
|
||||
c := expr.AsCall()
|
||||
other := c.FunctionName()
|
||||
return operators.Precedence(op) < operators.Precedence(other)
|
||||
}
|
||||
|
||||
// Indicates whether the expr is a complex operator, i.e., a call expression
|
||||
// with 2 or more arguments.
|
||||
func isComplexOperator(expr *exprpb.Expr) bool {
|
||||
if expr.GetCallExpr() != nil && len(expr.GetCallExpr().GetArgs()) >= 2 {
|
||||
func isComplexOperator(expr ast.Expr) bool {
|
||||
if expr.Kind() == ast.CallKind && len(expr.AsCall().Args()) >= 2 {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@ -484,19 +476,19 @@ func isComplexOperator(expr *exprpb.Expr) bool {
|
||||
// Indicates whether it is a complex operation compared to another.
|
||||
// expr is *not* considered complex if it is not a call expression or has
|
||||
// less than two arguments, or if it has a higher precedence than op.
|
||||
func isComplexOperatorWithRespectTo(op string, expr *exprpb.Expr) bool {
|
||||
if expr.GetCallExpr() == nil || len(expr.GetCallExpr().GetArgs()) < 2 {
|
||||
func isComplexOperatorWithRespectTo(op string, expr ast.Expr) bool {
|
||||
if expr.Kind() != ast.CallKind || len(expr.AsCall().Args()) < 2 {
|
||||
return false
|
||||
}
|
||||
return isLowerPrecedence(op, expr)
|
||||
}
|
||||
|
||||
// Indicate whether this is a binary or ternary operator.
|
||||
func isBinaryOrTernaryOperator(expr *exprpb.Expr) bool {
|
||||
if expr.GetCallExpr() == nil || len(expr.GetCallExpr().GetArgs()) < 2 {
|
||||
func isBinaryOrTernaryOperator(expr ast.Expr) bool {
|
||||
if expr.Kind() != ast.CallKind || len(expr.AsCall().Args()) < 2 {
|
||||
return false
|
||||
}
|
||||
_, isBinaryOp := operators.FindReverseBinaryOperator(expr.GetCallExpr().GetFunction())
|
||||
_, isBinaryOp := operators.FindReverseBinaryOperator(expr.AsCall().FunctionName())
|
||||
return isBinaryOp || isSamePrecedence(operators.Conditional, expr)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user