File: tst.StructDataTypes.d

package info (click to toggle)
dtrace 2.0.5-1
  • links: PTS
  • area: main
  • in suites: sid
  • size: 24,408 kB
  • sloc: ansic: 61,247; sh: 17,997; asm: 1,717; lex: 947; awk: 754; yacc: 695; perl: 37; sed: 17; makefile: 15
file content (109 lines) | stat: -rw-r--r-- 2,085 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
 * Oracle Linux DTrace.
 * Copyright (c) 2006, 2023, Oracle and/or its affiliates. All rights reserved.
 * Licensed under the Universal Permissive License v 1.0 as shown at
 * http://oss.oracle.com/licenses/upl.
 */

/*
 * ASSERTION: Declaration of the different data types within a struct and
 * their definitions in a later clause should work fine.
 *
 * SECTION: Structs and Unions/Structs
 *
 * NOTES: The floats, doubles and strings have not been implemented yet.
 * When they do, appropriate lines in the code below should be uncommented.
 * Similarly, the lines with the max_pfn pointer assignment should be
 * uncommented when the issues pertaining to it are clarified.
 *
 */
#pragma D option quiet

struct record {
	char new_char;
	short new_short;
	int new_int;
	long new_long;
	long long new_long_long;
	int8_t new_int8;
	int16_t new_int16;
	int32_t new_int32;
	int64_t new_int64;
	intptr_t new_intptr;
	uint8_t new_uint8;
	uint16_t new_uint16;
	uint32_t new_uint32;
	uint64_t new_uint64;
	uintptr_t new_uintptr;

	/*
	float new_float;
	double new_double;
	long double new_long_double;

	string new_string;
	*/

	struct {
		char ch;
		int in;
		long lg;
	} new_struct;

	union {
	     char ch;
	     int in;
	     long lg;
	} new_union;

enum colors {
	RED,
	GREEN,
	BLUE
} new_enum;


	unsigned long *pointer;
} var;

/* var.pointer = &`max_pfn; */

BEGIN
{
	var.new_char = 'c';
	var.new_short = 10;
	var.new_int = 100;
	var.new_long = 1234567890;
	var.new_long_long = 1234512345;
	var.new_int8 = 'p';
	var.new_int16 = 20;
	var.new_int32 = 200;
	var.new_int64 = 2000000;
	var.new_intptr = 0x12345;
	var.new_uint8 = 'q';
	var.new_uint16 = 30;
	var.new_uint32 = 300;
	var.new_uint64 = 3000000;
	var.new_uintptr = 0x67890;

/*	var.new_float = 1.23456;
	var.new_double = 2.34567890;
	var.new_long_double = 3.567890123;

	var.new_string = "hello";
*/

	var.pointer = (unsigned long *)&`max_pfn;

	var.new_struct.ch = 'c';
	var.new_struct.in = 4;
	var.new_struct.lg = 4;

	var.new_union.ch = 'd';
	var.new_union.in = 5;
	var.new_union.lg = 5;

	this->var = var;

	exit(0);
}