blob: 5522897689ab7a6351102a29862a88fec46ff87e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __STACKMAP6_H__
#define __STACKMAP6_H__
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "../base/stackmap_x.h"
//Constant for parsing StackMapTable attribute
enum StackMapTableItems {
ITEM_TOP = 0,
ITEM_INTEGER = 1,
ITEM_FLOAT = 2,
ITEM_DOUBLE = 3,
ITEM_LONG = 4,
ITEM_NULL = 5,
ITEM_UNINITIALIZEDTHIS = 6,
ITEM_OBJECT = 7,
ITEM_UNINITIALIZED = 8
};
//StackMapElement structure represens recorded verification types
//it's read from class file StackMapTable attribute
struct StackmapElement_6 {
//list of IncomingType constraint
_SmConstant const_val;
};
//WorkMapElement structure represent an element of the workmap vector -- vector of the derived types
//in Java6 verification type might be constant (or known) only
struct WorkmapElement_6 {
//the value
_SmConstant const_val; //either a constant (known-type)
//// Java5 anachonisms ////
void setJsrModified() {};
int isJsrModified() { return 1;};
SmConstant getAnyPossibleValue() { return const_val; }
SmConstant getConst() { return const_val; }
};
//WorkmapElement type with some constructors
struct _WorkmapElement_6 : WorkmapElement_6 {
_WorkmapElement_6(WorkmapElement_6 other) {
const_val = other.const_val;
}
_WorkmapElement_6(SmConstant c) {
const_val = c;
}
};
//Store stackmap data for the given instruction
// the list is used to organize storing Props as a HashTable
struct PropsHead_6 : public PropsHeadBase {
typedef MapHead<StackmapElement_6> StackmapHead;
//possible properties
StackmapHead stackmap;
//get stackmap stored here
StackmapHead *getStackmap() {
return &stackmap;
}
};
#endif